[llvm] 07253bc - [LICM] Convert tests to opaque pointers (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 5 07:49:13 PDT 2022
Author: Nikita Popov
Date: 2022-10-05T16:47:53+02:00
New Revision: 07253bc8c0a1f7f502fc5bb94f4205752c0d22e4
URL: https://github.com/llvm/llvm-project/commit/07253bc8c0a1f7f502fc5bb94f4205752c0d22e4
DIFF: https://github.com/llvm/llvm-project/commit/07253bc8c0a1f7f502fc5bb94f4205752c0d22e4.diff
LOG: [LICM] Convert tests to opaque pointers (NFC)
Using https://gist.github.com/nikic/98357b71fd67756b0f064c9517b62a34.
The opaque pointer migration resolves the TODO on test_fence3: The
transform now works as expected by dint of the bitcast no longer
existing.
Added:
Modified:
llvm/test/Transforms/LICM/2003-02-26-LoopExitNotDominated.ll
llvm/test/Transforms/LICM/2003-02-27-PreheaderExitNodeUpdate.ll
llvm/test/Transforms/LICM/2003-02-27-StoreSinkPHIs.ll
llvm/test/Transforms/LICM/2003-02-28-PromoteDifferentType.ll
llvm/test/Transforms/LICM/2003-05-02-LoadHoist.ll
llvm/test/Transforms/LICM/2004-09-14-AliasAnalysisInvalidate.ll
llvm/test/Transforms/LICM/2004-11-17-UndefIndexCrash.ll
llvm/test/Transforms/LICM/2006-09-12-DeadUserOfSunkInstr.ll
llvm/test/Transforms/LICM/2007-05-22-VolatileSink.ll
llvm/test/Transforms/LICM/2007-07-30-AliasSet.ll
llvm/test/Transforms/LICM/2007-09-17-PromoteValue.ll
llvm/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll
llvm/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll
llvm/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll
llvm/test/Transforms/LICM/2008-07-22-LoadGlobalConstant.ll
llvm/test/Transforms/LICM/2009-12-10-LICM-Indbr-Crash.ll
llvm/test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll
llvm/test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll
llvm/test/Transforms/LICM/2011-04-09-RAUW-AST.ll
llvm/test/Transforms/LICM/2011-07-06-Alignment.ll
llvm/test/Transforms/LICM/AArch64/sve-load-hoist.ll
llvm/test/Transforms/LICM/AMDGPU/bitcast.ll
llvm/test/Transforms/LICM/AliasSetMemSet.ll
llvm/test/Transforms/LICM/PR21582.ll
llvm/test/Transforms/LICM/allow-speculation-option.ll
llvm/test/Transforms/LICM/argmemonly-call.ll
llvm/test/Transforms/LICM/assume.ll
llvm/test/Transforms/LICM/atomics.ll
llvm/test/Transforms/LICM/call-hoisting.ll
llvm/test/Transforms/LICM/constexpr.ll
llvm/test/Transforms/LICM/convergent.ll
llvm/test/Transforms/LICM/crash.ll
llvm/test/Transforms/LICM/dropped-tbaa.ll
llvm/test/Transforms/LICM/explicit_guards.ll
llvm/test/Transforms/LICM/fence.ll
llvm/test/Transforms/LICM/funclet.ll
llvm/test/Transforms/LICM/gc-relocate.ll
llvm/test/Transforms/LICM/guards.ll
llvm/test/Transforms/LICM/hoist-alloc.ll
llvm/test/Transforms/LICM/hoist-bitcast-load.ll
llvm/test/Transforms/LICM/hoist-debuginvariant.ll
llvm/test/Transforms/LICM/hoist-deref-load.ll
llvm/test/Transforms/LICM/hoist-fast-fdiv.ll
llvm/test/Transforms/LICM/hoist-invariant-load.ll
llvm/test/Transforms/LICM/hoist-load-without-store.ll
llvm/test/Transforms/LICM/hoist-mustexec.ll
llvm/test/Transforms/LICM/hoist-nounwind.ll
llvm/test/Transforms/LICM/hoist-phi.ll
llvm/test/Transforms/LICM/hoisting-preheader-debugloc.ll
llvm/test/Transforms/LICM/hoisting.ll
llvm/test/Transforms/LICM/infinite_loops.ll
llvm/test/Transforms/LICM/int_sideeffect.ll
llvm/test/Transforms/LICM/invariant.start.ll
llvm/test/Transforms/LICM/lcssa-ssa-promoter.ll
llvm/test/Transforms/LICM/lnicm-sink.ll
llvm/test/Transforms/LICM/loopsink-pr38462.ll
llvm/test/Transforms/LICM/loopsink-pr39570.ll
llvm/test/Transforms/LICM/loopsink-pr39695.ll
llvm/test/Transforms/LICM/loopsink.ll
llvm/test/Transforms/LICM/opt-remarks-conditional-load.ll
llvm/test/Transforms/LICM/opt-remarks-intervening-store.ll
llvm/test/Transforms/LICM/opt-remarks.ll
llvm/test/Transforms/LICM/pr23608.ll
llvm/test/Transforms/LICM/pr26843.ll
llvm/test/Transforms/LICM/pr27262.ll
llvm/test/Transforms/LICM/pr36228.ll
llvm/test/Transforms/LICM/pr37323.ll
llvm/test/Transforms/LICM/pr38513.ll
llvm/test/Transforms/LICM/pr40317.ll
llvm/test/Transforms/LICM/pr42969.ll
llvm/test/Transforms/LICM/pr50367.ll
llvm/test/Transforms/LICM/pr51333.ll
llvm/test/Transforms/LICM/pr55672.ll
llvm/test/Transforms/LICM/pragma-licm-disable.ll
llvm/test/Transforms/LICM/preheader-safe.ll
llvm/test/Transforms/LICM/promote-atomic.ll
llvm/test/Transforms/LICM/promote-capture.ll
llvm/test/Transforms/LICM/promote-order.ll
llvm/test/Transforms/LICM/promote-tls.ll
llvm/test/Transforms/LICM/read-only-calls.ll
llvm/test/Transforms/LICM/scalar-promote-memmodel.ll
llvm/test/Transforms/LICM/scalar-promote-opaque-ptrs.ll
llvm/test/Transforms/LICM/scalar-promote-unwind.ll
llvm/test/Transforms/LICM/scalar-promote.ll
llvm/test/Transforms/LICM/sink-debuginfo-preserve.ll
llvm/test/Transforms/LICM/sink-foldable.ll
llvm/test/Transforms/LICM/sink-promote.ll
llvm/test/Transforms/LICM/sink-with-coroutine.ll
llvm/test/Transforms/LICM/sinking-debugify.ll
llvm/test/Transforms/LICM/sinking.ll
llvm/test/Transforms/LICM/speculate.ll
llvm/test/Transforms/LICM/store-hoisting.ll
llvm/test/Transforms/LICM/strlen.ll
llvm/test/Transforms/LICM/unrolled-deeply-nested.ll
llvm/test/Transforms/LICM/update-scev.ll
llvm/test/Transforms/LICM/volatile-alias.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/LICM/2003-02-26-LoopExitNotDominated.ll b/llvm/test/Transforms/LICM/2003-02-26-LoopExitNotDominated.ll
index ffb738cb9def5..ac4f54cd6d85a 100644
--- a/llvm/test/Transforms/LICM/2003-02-26-LoopExitNotDominated.ll
+++ b/llvm/test/Transforms/LICM/2003-02-26-LoopExitNotDominated.ll
@@ -4,13 +4,13 @@
define void @InitMoveArray() {
bb3:
- %X = alloca [2 x i64] ; <[2 x i64]*> [#uses=1]
+ %X = alloca [2 x i64] ; <ptr> [#uses=1]
br i1 false, label %bb13, label %bb4
bb4: ; preds = %bb3
- %reg3011 = getelementptr [2 x i64], [2 x i64]* %X, i64 0, i64 0 ; <i64*> [#uses=1]
+ %reg3011 = getelementptr [2 x i64], ptr %X, i64 0, i64 0 ; <ptr> [#uses=1]
br label %bb8
bb8: ; preds = %bb8, %bb4
- store i64 0, i64* %reg3011
+ store i64 0, ptr %reg3011
br i1 false, label %bb8, label %bb13
bb13: ; preds = %bb8, %bb3
ret void
diff --git a/llvm/test/Transforms/LICM/2003-02-27-PreheaderExitNodeUpdate.ll b/llvm/test/Transforms/LICM/2003-02-27-PreheaderExitNodeUpdate.ll
index 2718cb1053773..bc7b5e0c3e3db 100644
--- a/llvm/test/Transforms/LICM/2003-02-27-PreheaderExitNodeUpdate.ll
+++ b/llvm/test/Transforms/LICM/2003-02-27-PreheaderExitNodeUpdate.ll
@@ -3,7 +3,7 @@
; RUN: opt < %s -licm
-define i32 @main(i32 %argc, i8** %argv) {
+define i32 @main(i32 %argc, ptr %argv) {
bb0:
br i1 false, label %bb7, label %bb5
bb5: ; preds = %bb5, %bb0
diff --git a/llvm/test/Transforms/LICM/2003-02-27-StoreSinkPHIs.ll b/llvm/test/Transforms/LICM/2003-02-27-StoreSinkPHIs.ll
index a9c6b856f8ea5..ae8d215c795c5 100644
--- a/llvm/test/Transforms/LICM/2003-02-27-StoreSinkPHIs.ll
+++ b/llvm/test/Transforms/LICM/2003-02-27-StoreSinkPHIs.ll
@@ -6,7 +6,7 @@ define i1 @test(i1 %c) {
; <label>:0
br i1 %c, label %Loop, label %Out
Loop: ; preds = %Loop, %0
- store i32 0, i32* null
+ store i32 0, ptr null
br i1 %c, label %Loop, label %Out
Out: ; preds = %Loop, %0
%X = phi i1 [ %c, %0 ], [ true, %Loop ] ; <i1> [#uses=1]
diff --git a/llvm/test/Transforms/LICM/2003-02-28-PromoteDifferentType.ll b/llvm/test/Transforms/LICM/2003-02-28-PromoteDifferentType.ll
index c759e6eff8e7e..2c23258758e9d 100644
--- a/llvm/test/Transforms/LICM/2003-02-28-PromoteDifferentType.ll
+++ b/llvm/test/Transforms/LICM/2003-02-28-PromoteDifferentType.ll
@@ -2,12 +2,11 @@
;
; RUN: opt < %s -licm
-define void @test(i32* %P) {
+define void @test(ptr %P) {
br label %Loop
Loop: ; preds = %Loop, %0
- store i32 5, i32* %P
- %P2 = bitcast i32* %P to i8* ; <i8*> [#uses=1]
- store i8 4, i8* %P2
+ store i32 5, ptr %P
+ store i8 4, ptr %P
br i1 true, label %Loop, label %Out
Out: ; preds = %Loop
ret void
diff --git a/llvm/test/Transforms/LICM/2003-05-02-LoadHoist.ll b/llvm/test/Transforms/LICM/2003-05-02-LoadHoist.ll
index 2f94dff4efd70..218f9a78576a0 100644
--- a/llvm/test/Transforms/LICM/2003-05-02-LoadHoist.ll
+++ b/llvm/test/Transforms/LICM/2003-05-02-LoadHoist.ll
@@ -5,17 +5,17 @@
;
; RUN: opt < %s -licm -gvn -instcombine -S | grep load
- at X = global i32 7 ; <i32*> [#uses=2]
+ at X = global i32 7 ; <ptr> [#uses=2]
declare void @foo()
define i32 @test(i1 %c) {
- %A = load i32, i32* @X ; <i32> [#uses=1]
+ %A = load i32, ptr @X ; <i32> [#uses=1]
br label %Loop
Loop: ; preds = %Loop, %0
call void @foo( )
;; Should not hoist this load!
- %B = load i32, i32* @X ; <i32> [#uses=1]
+ %B = load i32, ptr @X ; <i32> [#uses=1]
br i1 %c, label %Loop, label %Out
Out: ; preds = %Loop
%C = sub i32 %A, %B ; <i32> [#uses=1]
diff --git a/llvm/test/Transforms/LICM/2004-09-14-AliasAnalysisInvalidate.ll b/llvm/test/Transforms/LICM/2004-09-14-AliasAnalysisInvalidate.ll
index e2b07facd48e4..348f4de6dcd11 100644
--- a/llvm/test/Transforms/LICM/2004-09-14-AliasAnalysisInvalidate.ll
+++ b/llvm/test/Transforms/LICM/2004-09-14-AliasAnalysisInvalidate.ll
@@ -1,15 +1,15 @@
; RUN: opt < %s -globals-aa -licm -disable-output
- at PL_regcomp_parse = internal global i8* null ; <i8**> [#uses=2]
+ at PL_regcomp_parse = internal global ptr null ; <ptr> [#uses=2]
define void @test() {
br label %Outer
Outer: ; preds = %Next, %0
br label %Inner
Inner: ; preds = %Inner, %Outer
- %tmp.114.i.i.i = load i8*, i8** @PL_regcomp_parse ; <i8*> [#uses=1]
- %tmp.115.i.i.i = load i8, i8* %tmp.114.i.i.i ; <i8> [#uses=0]
- store i8* null, i8** @PL_regcomp_parse
+ %tmp.114.i.i.i = load ptr, ptr @PL_regcomp_parse ; <ptr> [#uses=1]
+ %tmp.115.i.i.i = load i8, ptr %tmp.114.i.i.i ; <i8> [#uses=0]
+ store ptr null, ptr @PL_regcomp_parse
br i1 false, label %Inner, label %Next
Next: ; preds = %Inner
br i1 false, label %Outer, label %Exit
diff --git a/llvm/test/Transforms/LICM/2004-11-17-UndefIndexCrash.ll b/llvm/test/Transforms/LICM/2004-11-17-UndefIndexCrash.ll
index 9416028ef2e79..dd13b2c6e4b47 100644
--- a/llvm/test/Transforms/LICM/2004-11-17-UndefIndexCrash.ll
+++ b/llvm/test/Transforms/LICM/2004-11-17-UndefIndexCrash.ll
@@ -1,20 +1,20 @@
; RUN: opt < %s -licm -disable-output
- %struct.roadlet = type { i8*, %struct.vehicle*, [8 x %struct.roadlet*], [8 x %struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)*] }
- %struct.vehicle = type { %struct.roadlet*, i8*, i32, i32, %union.._631., i32 }
+ %struct.roadlet = type { ptr, ptr, [8 x ptr], [8 x ptr] }
+ %struct.vehicle = type { ptr, ptr, i32, i32, %union.._631., i32 }
%union.._631. = type { i32 }
-declare %struct.roadlet* @_Z11return_nullP7roadletP7vehicle9direction(%struct.roadlet*, %struct.vehicle*, i32)
+declare ptr @_Z11return_nullP7roadletP7vehicle9direction(ptr, ptr, i32)
-declare %struct.roadlet* @_Z14lane_switch_okP7roadletP7vehicle9direction(%struct.roadlet*, %struct.vehicle*, i32)
+declare ptr @_Z14lane_switch_okP7roadletP7vehicle9direction(ptr, ptr, i32)
define void @main() {
__main.entry:
br label %invoke_cont.3
invoke_cont.3: ; preds = %invoke_cont.3, %__main.entry
- %tmp.34.i.i502.7 = getelementptr %struct.roadlet, %struct.roadlet* null, i32 0, i32 3, i32 7 ; <%struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)**> [#uses=1]
- store %struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)* @_Z11return_nullP7roadletP7vehicle9direction, %struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)** %tmp.34.i.i502.7
- store %struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)* @_Z14lane_switch_okP7roadletP7vehicle9direction, %struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)** null
- %tmp.4.i.i339 = getelementptr %struct.roadlet, %struct.roadlet* null, i32 0, i32 3, i32 undef ; <%struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)**> [#uses=1]
- store %struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)* @_Z11return_nullP7roadletP7vehicle9direction, %struct.roadlet* (%struct.roadlet*, %struct.vehicle*, i32)** %tmp.4.i.i339
+ %tmp.34.i.i502.7 = getelementptr %struct.roadlet, ptr null, i32 0, i32 3, i32 7 ; <ptr> [#uses=1]
+ store ptr @_Z11return_nullP7roadletP7vehicle9direction, ptr %tmp.34.i.i502.7
+ store ptr @_Z14lane_switch_okP7roadletP7vehicle9direction, ptr null
+ %tmp.4.i.i339 = getelementptr %struct.roadlet, ptr null, i32 0, i32 3, i32 undef ; <ptr> [#uses=1]
+ store ptr @_Z11return_nullP7roadletP7vehicle9direction, ptr %tmp.4.i.i339
br label %invoke_cont.3
}
diff --git a/llvm/test/Transforms/LICM/2006-09-12-DeadUserOfSunkInstr.ll b/llvm/test/Transforms/LICM/2006-09-12-DeadUserOfSunkInstr.ll
index 9763660ffb0be..56350cedcda98 100644
--- a/llvm/test/Transforms/LICM/2006-09-12-DeadUserOfSunkInstr.ll
+++ b/llvm/test/Transforms/LICM/2006-09-12-DeadUserOfSunkInstr.ll
@@ -2,11 +2,11 @@
; PR908
; END.
- %struct.alloc_chain = type { i8*, %struct.alloc_chain* }
- %struct.oggpack_buffer = type { i32, i32, i8*, i8*, i32 }
- %struct.vorbis_block = type { float**, %struct.oggpack_buffer, i32, i32, i32, i32, i32, i32, i64, i64, %struct.vorbis_dsp_state*, i8*, i32, i32, i32, %struct.alloc_chain*, i32, i32, i32, i32, i8* }
- %struct.vorbis_dsp_state = type { i32, %struct.vorbis_info*, float**, float**, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i8* }
- %struct.vorbis_info = type { i32, i32, i32, i32, i32, i32, i32, i8* }
+ %struct.alloc_chain = type { ptr, ptr }
+ %struct.oggpack_buffer = type { i32, i32, ptr, ptr, i32 }
+ %struct.vorbis_block = type { ptr, %struct.oggpack_buffer, i32, i32, i32, i32, i32, i32, i64, i64, ptr, ptr, i32, i32, i32, ptr, i32, i32, i32, i32, ptr }
+ %struct.vorbis_dsp_state = type { i32, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, ptr }
+ %struct.vorbis_info = type { i32, i32, i32, i32, i32, i32, i32, ptr }
define fastcc void @_01forward() {
entry:
diff --git a/llvm/test/Transforms/LICM/2007-05-22-VolatileSink.ll b/llvm/test/Transforms/LICM/2007-05-22-VolatileSink.ll
index f5ce86b7245ac..5342cbbcf07b1 100644
--- a/llvm/test/Transforms/LICM/2007-05-22-VolatileSink.ll
+++ b/llvm/test/Transforms/LICM/2007-05-22-VolatileSink.ll
@@ -3,16 +3,16 @@
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"
target triple = "i686-apple-darwin8"
-define void @Transpose(i32* %DataIn, i32* %DataOut) {
+define void @Transpose(ptr %DataIn, ptr %DataOut) {
entry:
- %buffer = alloca [64 x i32], align 16 ; <[64 x i32]*> [#uses=2]
+ %buffer = alloca [64 x i32], align 16 ; <ptr> [#uses=2]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
br label %bb6
bb: ; preds = %bb6
- %tmp2 = load volatile i32, i32* %DataIn ; <i32> [#uses=1]
- %tmp3 = getelementptr [64 x i32], [64 x i32]* %buffer, i32 0, i32 %i.0 ; <i32*> [#uses=1]
- store i32 %tmp2, i32* %tmp3
+ %tmp2 = load volatile i32, ptr %DataIn ; <i32> [#uses=1]
+ %tmp3 = getelementptr [64 x i32], ptr %buffer, i32 0, i32 %i.0 ; <ptr> [#uses=1]
+ store i32 %tmp2, ptr %tmp3
%tmp5 = add i32 %i.0, 1 ; <i32> [#uses=1]
br label %bb6
@@ -26,9 +26,9 @@ bb6: ; preds = %bb, %entry
bb12: ; preds = %bb22
%tmp14 = mul i32 %j.1, 8 ; <i32> [#uses=1]
%tmp16 = add i32 %tmp14, %i.1 ; <i32> [#uses=1]
- %tmp17 = getelementptr [64 x i32], [64 x i32]* %buffer, i32 0, i32 %tmp16 ; <i32*> [#uses=1]
- %tmp18 = load i32, i32* %tmp17 ; <i32> [#uses=1]
- store volatile i32 %tmp18, i32* %DataOut
+ %tmp17 = getelementptr [64 x i32], ptr %buffer, i32 0, i32 %tmp16 ; <ptr> [#uses=1]
+ %tmp18 = load i32, ptr %tmp17 ; <i32> [#uses=1]
+ store volatile i32 %tmp18, ptr %DataOut
%tmp21 = add i32 %j.1, 1 ; <i32> [#uses=1]
br label %bb22
diff --git a/llvm/test/Transforms/LICM/2007-07-30-AliasSet.ll b/llvm/test/Transforms/LICM/2007-07-30-AliasSet.ll
index fb672f0441029..1a62839a280d3 100644
--- a/llvm/test/Transforms/LICM/2007-07-30-AliasSet.ll
+++ b/llvm/test/Transforms/LICM/2007-07-30-AliasSet.ll
@@ -1,8 +1,8 @@
; RUN: opt < %s -licm -simple-loop-unswitch -disable-output
%struct.III_scalefac_t = type { [22 x i32], [13 x [3 x i32]] }
- %struct.gr_info = type { i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32*, [4 x i32] }
+ %struct.gr_info = type { i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, [4 x i32] }
-define i32 @scale_bitcount_lsf(%struct.III_scalefac_t* %scalefac, %struct.gr_info* %cod_info) {
+define i32 @scale_bitcount_lsf(ptr %scalefac, ptr %cod_info) {
entry:
br i1 false, label %bb28, label %bb133.preheader
@@ -17,13 +17,13 @@ bb63.outer: ; preds = %bb73, %bb28
bb35: ; preds = %cond_next60, %bb63.outer
%window.34 = phi i32 [ %tmp62, %cond_next60 ], [ 0, %bb63.outer ] ; <i32> [#uses=1]
- %tmp44 = getelementptr [4 x i32], [4 x i32]* null, i32 0, i32 0 ; <i32*> [#uses=1]
- %tmp46 = load i32, i32* %tmp44, align 4 ; <i32> [#uses=0]
+ %tmp44 = getelementptr [4 x i32], ptr null, i32 0, i32 0 ; <ptr> [#uses=1]
+ %tmp46 = load i32, ptr %tmp44, align 4 ; <i32> [#uses=0]
br i1 false, label %cond_true50, label %cond_next60
cond_true50: ; preds = %bb35
- %tmp59 = getelementptr [4 x i32], [4 x i32]* null, i32 0, i32 0 ; <i32*> [#uses=1]
- store i32 0, i32* %tmp59, align 4
+ %tmp59 = getelementptr [4 x i32], ptr null, i32 0, i32 0 ; <ptr> [#uses=1]
+ store i32 0, ptr %tmp59, align 4
br label %cond_next60
cond_next60: ; preds = %cond_true50, %bb35
diff --git a/llvm/test/Transforms/LICM/2007-09-17-PromoteValue.ll b/llvm/test/Transforms/LICM/2007-09-17-PromoteValue.ll
index 1d25d17c2e640..c9235222ca121 100644
--- a/llvm/test/Transforms/LICM/2007-09-17-PromoteValue.ll
+++ b/llvm/test/Transforms/LICM/2007-09-17-PromoteValue.ll
@@ -1,21 +1,21 @@
; ModuleID = 'PR1657.bc'
; Do not promote getelementptr because it may exposes load from a null pointer
; and store from a null pointer which are covered by
-; icmp eq %struct.decision* null, null condition.
+; icmp eq ptr null, null condition.
; RUN: opt < %s -licm -S | not grep promoted
- %struct.decision = type { i8, %struct.decision* }
+ %struct.decision = type { i8, ptr }
define i32 @main() {
entry:
br label %blah.i
blah.i: ; preds = %cond_true.i, %entry
- %tmp3.i = icmp eq %struct.decision* null, null ; <i1> [#uses=1]
+ %tmp3.i = icmp eq ptr null, null ; <i1> [#uses=1]
br i1 %tmp3.i, label %clear_modes.exit, label %cond_true.i
cond_true.i: ; preds = %blah.i
- %tmp1.i = getelementptr %struct.decision, %struct.decision* null, i32 0, i32 0 ; <i8*> [#uses=1]
- store i8 0, i8* %tmp1.i
+ %tmp1.i = getelementptr %struct.decision, ptr null, i32 0, i32 0 ; <ptr> [#uses=1]
+ store i8 0, ptr %tmp1.i
br label %blah.i
clear_modes.exit: ; preds = %blah.i
@@ -23,35 +23,35 @@ clear_modes.exit: ; preds = %blah.i
unreachable
}
-define i32 @f(i8* %ptr) {
+define i32 @f(ptr %ptr) {
entry:
br label %loop.head
loop.head: ; preds = %cond.true, %entry
- %x = phi i8* [ %ptr, %entry ], [ %ptr.i, %cond.true ] ; <i8*> [#uses=1]
- %tmp3.i = icmp ne i8* %ptr, %x ; <i1> [#uses=1]
+ %x = phi ptr [ %ptr, %entry ], [ %ptr.i, %cond.true ] ; <ptr> [#uses=1]
+ %tmp3.i = icmp ne ptr %ptr, %x ; <i1> [#uses=1]
br i1 %tmp3.i, label %cond.true, label %exit
cond.true: ; preds = %loop.head
- %ptr.i = getelementptr i8, i8* %ptr, i32 0 ; <i8*> [#uses=2]
- store i8 0, i8* %ptr.i
+ %ptr.i = getelementptr i8, ptr %ptr, i32 0 ; <ptr> [#uses=2]
+ store i8 0, ptr %ptr.i
br label %loop.head
exit: ; preds = %loop.head
ret i32 0
}
-define i32 @f2(i8* %p, i8* %q) {
+define i32 @f2(ptr %p, ptr %q) {
entry:
br label %loop.head
loop.head: ; preds = %cond.true, %entry
- %tmp3.i = icmp eq i8* null, %q ; <i1> [#uses=1]
+ %tmp3.i = icmp eq ptr null, %q ; <i1> [#uses=1]
br i1 %tmp3.i, label %exit, label %cond.true
cond.true: ; preds = %loop.head
- %ptr.i = getelementptr i8, i8* %p, i32 0 ; <i8*> [#uses=2]
- store i8 0, i8* %ptr.i
+ %ptr.i = getelementptr i8, ptr %p, i32 0 ; <ptr> [#uses=2]
+ store i8 0, ptr %ptr.i
br label %loop.head
exit: ; preds = %loop.head
diff --git a/llvm/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll b/llvm/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll
index 916f479cba149..00dbdc3d06372 100644
--- a/llvm/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll
+++ b/llvm/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll
@@ -25,7 +25,7 @@ cond_true11: ; preds = %bb6
br label %return
cond_next14: ; preds = %bb6
- store i8 0, i8* null
+ store i8 0, ptr null
br label %bb15
bb15: ; preds = %cond_next14, %bb
diff --git a/llvm/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll b/llvm/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll
index e3d0d02edd9df..7ac03cf4349a4 100644
--- a/llvm/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll
+++ b/llvm/test/Transforms/LICM/2007-10-01-PromoteSafeValue.ll
@@ -2,21 +2,21 @@
; Promote value if at least one use is safe
-define i32 @f2(i32* %p, i8* %q) {
+define i32 @f2(ptr %p, ptr %q) {
entry:
br label %loop.head
loop.head: ; preds = %cond.true, %entry
- store i32 20, i32* %p
- %tmp3.i = icmp eq i8* null, %q ; <i1> [#uses=1]
+ store i32 20, ptr %p
+ %tmp3.i = icmp eq ptr null, %q ; <i1> [#uses=1]
br i1 %tmp3.i, label %exit, label %cond.true
cond.true: ; preds = %loop.head
- store i32 40, i32* %p
+ store i32 40, ptr %p
br label %loop.head
; CHECK: exit:
-; CHECK: store i32 20, i32* %p
+; CHECK: store i32 20, ptr %p
exit: ; preds = %loop.head
ret i32 0
}
diff --git a/llvm/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll b/llvm/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll
index a5a7bf85f10d4..5c00d76ce5395 100644
--- a/llvm/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll
+++ b/llvm/test/Transforms/LICM/2008-05-20-AliasSetVAArg.ll
@@ -5,7 +5,7 @@ target triple = "i686-pc-linux-gnu"
%struct._zval_struct = type { %union._double, i32, i8, i8, i8, i8 }
%union._double = type { double }
-define i8* @zend_fetch_resource(%struct._zval_struct** %passed_id, i32 %default_id, i8* %resource_type_name, i32* %found_resource_type, i32 %num_resource_types, ...) {
+define ptr @zend_fetch_resource(ptr %passed_id, i32 %default_id, ptr %resource_type_name, ptr %found_resource_type, i32 %num_resource_types, ...) {
entry:
br label %whilebody.i.i
@@ -19,12 +19,12 @@ forcond: ; preds = %forbody, %ifthen.i.i
br i1 false, label %forbody, label %afterfor
forbody: ; preds = %forcond
- va_arg i8** null, i32 ; <i32>:0 [#uses=0]
+ va_arg ptr null, i32 ; <i32>:0 [#uses=0]
br i1 false, label %ifthen59, label %forcond
ifthen59: ; preds = %forbody
unreachable
afterfor: ; preds = %forcond
- ret i8* null
+ ret ptr null
}
diff --git a/llvm/test/Transforms/LICM/2008-07-22-LoadGlobalConstant.ll b/llvm/test/Transforms/LICM/2008-07-22-LoadGlobalConstant.ll
index c7b5f65dde8a2..982920f9b9169 100644
--- a/llvm/test/Transforms/LICM/2008-07-22-LoadGlobalConstant.ll
+++ b/llvm/test/Transforms/LICM/2008-07-22-LoadGlobalConstant.ll
@@ -1,12 +1,12 @@
; RUN: opt < %s -basic-aa -licm -S | FileCheck %s
- at a = external constant float*
+ at a = external constant ptr
define void @test(i32 %count) {
entry:
br label %forcond
-; CHECK: %tmp3 = load float*, float** @a
+; CHECK: %tmp3 = load ptr, ptr @a
; CHECK: br label %forcond
forcond:
@@ -19,16 +19,16 @@ forcond:
; CHECK: br i1 %cmp, label %forbody, label %afterfor
forbody:
- %tmp3 = load float*, float** @a
- %arrayidx = getelementptr float, float* %tmp3, i32 %i.0
+ %tmp3 = load ptr, ptr @a
+ %arrayidx = getelementptr float, ptr %tmp3, i32 %i.0
%tmp7 = uitofp i32 %i.0 to float
- store float %tmp7, float* %arrayidx
+ store float %tmp7, ptr %arrayidx
%inc = add i32 %i.0, 1
br label %forcond
-; CHECK: %arrayidx = getelementptr float, float* %tmp3, i32 %i.0
+; CHECK: %arrayidx = getelementptr float, ptr %tmp3, i32 %i.0
; CHECK: %tmp7 = uitofp i32 %i.0 to float
-; CHECK: store float %tmp7, float* %arrayidx
+; CHECK: store float %tmp7, ptr %arrayidx
; CHECK: %inc = add i32 %i.0, 1
; CHECK: br label %forcond
diff --git a/llvm/test/Transforms/LICM/2009-12-10-LICM-Indbr-Crash.ll b/llvm/test/Transforms/LICM/2009-12-10-LICM-Indbr-Crash.ll
index 1b3ff5bbb3185..937d197212169 100644
--- a/llvm/test/Transforms/LICM/2009-12-10-LICM-Indbr-Crash.ll
+++ b/llvm/test/Transforms/LICM/2009-12-10-LICM-Indbr-Crash.ll
@@ -1,6 +1,6 @@
; Test for rdar://7452967
; RUN: opt < %s -licm -disable-output
-define void @foo (i8* %v)
+define void @foo (ptr %v)
{
entry:
br i1 undef, label %preheader, label %return
@@ -9,10 +9,10 @@ define void @foo (i8* %v)
br i1 undef, label %loop, label %return
loop:
- indirectbr i8* undef, [label %preheader, label %stuff]
+ indirectbr ptr undef, [label %preheader, label %stuff]
stuff:
- %0 = load i8, i8* undef, align 1
+ %0 = load i8, ptr undef, align 1
br label %loop
return:
diff --git a/llvm/test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll b/llvm/test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll
index fb0fbbdc69462..b83f870a89329 100644
--- a/llvm/test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll
+++ b/llvm/test/Transforms/LICM/2011-04-06-HoistMissedASTUpdate.ll
@@ -3,9 +3,9 @@
@g_39 = external global i16, align 2
-declare i32* @func_84(i32** nocapture) nounwind readonly
+declare ptr @func_84(ptr nocapture) nounwind readonly
-declare i32** @func_108(i32*** nocapture) nounwind readonly
+declare ptr @func_108(ptr nocapture) nounwind readonly
define void @func() nounwind {
entry:
@@ -15,13 +15,13 @@ for.body4.lr.ph:
br label %for.body4
; CHECK: for.body4:
-; CHECK: load volatile i16, i16* @g_39
+; CHECK: load volatile i16, ptr @g_39
for.body4:
- %l_612.11 = phi i32* [ undef, %for.body4.lr.ph ], [ %call19, %for.body4 ]
- %tmp7 = load volatile i16, i16* @g_39, align 2
- %call = call i32** @func_108(i32*** undef)
- %call19 = call i32* @func_84(i32** %call)
+ %l_612.11 = phi ptr [ undef, %for.body4.lr.ph ], [ %call19, %for.body4 ]
+ %tmp7 = load volatile i16, ptr @g_39, align 2
+ %call = call ptr @func_108(ptr undef)
+ %call19 = call ptr @func_84(ptr %call)
br i1 false, label %for.body4, label %for.cond.loopexit
for.cond.loopexit:
diff --git a/llvm/test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll b/llvm/test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll
index ede773f5f039c..d6c13d4cc695d 100644
--- a/llvm/test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll
+++ b/llvm/test/Transforms/LICM/2011-04-06-PromoteResultOfPromotion.ll
@@ -2,13 +2,13 @@
; PR9634
@g_58 = common global i32 0, align 4
- at g_116 = common global i32* null, align 8
+ at g_116 = common global ptr null, align 8
define void @f() nounwind {
; CHECK: entry:
; CHECK: alloca [9 x i16]
-; CHECK: load i32, i32* @g_58
+; CHECK: load i32, ptr @g_58
; CHECK: br label %for.body
entry:
@@ -17,11 +17,11 @@ entry:
for.body: ; preds = %entry, %for.inc
%inc12 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
- store i32* @g_58, i32** @g_116, align 8, !tbaa !0
- %tmp2 = load i32*, i32** @g_116, align 8, !tbaa !0
- %tmp3 = load i32, i32* %tmp2, !tbaa !4
+ store ptr @g_58, ptr @g_116, align 8, !tbaa !0
+ %tmp2 = load ptr, ptr @g_116, align 8, !tbaa !0
+ %tmp3 = load i32, ptr %tmp2, !tbaa !4
%or = or i32 %tmp3, 10
- store i32 %or, i32* %tmp2, !tbaa !4
+ store i32 %or, ptr %tmp2, !tbaa !4
%inc = add nsw i32 %inc12, 1
%cmp = icmp slt i32 %inc, 4
br i1 %cmp, label %for.body, label %for.end
diff --git a/llvm/test/Transforms/LICM/2011-04-09-RAUW-AST.ll b/llvm/test/Transforms/LICM/2011-04-09-RAUW-AST.ll
index bf069c2a99174..95614c590ff46 100644
--- a/llvm/test/Transforms/LICM/2011-04-09-RAUW-AST.ll
+++ b/llvm/test/Transforms/LICM/2011-04-09-RAUW-AST.ll
@@ -6,7 +6,7 @@
define i32 @main() nounwind {
entry:
- %tmp = load i32, i32* @g_3, align 4
+ %tmp = load i32, ptr @g_3, align 4
%tobool = icmp eq i32 %tmp, 0
br i1 %tobool, label %for.cond, label %if.then
@@ -14,7 +14,7 @@ if.then: ; preds = %entry
br label %for.cond
for.cond: ; preds = %for.inc10, %if.then, %entry
- %g.0 = phi i32* [ %g.0, %for.inc10 ], [ @g_3, %entry ], [ null, %if.then ]
+ %g.0 = phi ptr [ %g.0, %for.inc10 ], [ @g_3, %entry ], [ null, %if.then ]
%x.0 = phi i32 [ %inc12, %for.inc10 ], [ 0, %entry ], [ 0, %if.then ]
%cmp = icmp slt i32 %x.0, 5
br i1 %cmp, label %for.cond4, label %for.end13
@@ -30,8 +30,8 @@ for.cond4: ; preds = %for.body7, %for.con
; CHECK-NEXT: store i32 1
for.body7: ; preds = %for.cond4
- store i32 0, i32* @g_3, align 4
- store i32 1, i32* %g.0, align 4
+ store i32 0, ptr @g_3, align 4
+ store i32 1, ptr %g.0, align 4
%inc = add nsw i32 %y.0, 1
br label %for.cond4
@@ -40,10 +40,10 @@ for.inc10: ; preds = %for.cond4
br label %for.cond
for.end13: ; preds = %for.cond
- %tmp14 = load i32, i32* @g_3, align 4
- %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %tmp14) nounwind
+ %tmp14 = load i32, ptr @g_3, align 4
+ %call = tail call i32 (ptr, ...) @printf(ptr @.str, i32 %tmp14) nounwind
ret i32 0
}
-declare i32 @printf(i8* nocapture, ...) nounwind
+declare i32 @printf(ptr nocapture, ...) nounwind
diff --git a/llvm/test/Transforms/LICM/2011-07-06-Alignment.ll b/llvm/test/Transforms/LICM/2011-07-06-Alignment.ll
index c71dd802ea9be..f9e2f5dfdf3cf 100644
--- a/llvm/test/Transforms/LICM/2011-07-06-Alignment.ll
+++ b/llvm/test/Transforms/LICM/2011-07-06-Alignment.ll
@@ -8,9 +8,8 @@ entry:
for.cond:
%indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %entry ]
- %arrayidx = getelementptr [1024 x float], [1024 x float]* @A, i64 0, i64 3
- %vecidx = bitcast float* %arrayidx to <4 x float>*
- store <4 x float> zeroinitializer, <4 x float>* %vecidx, align 4
+ %arrayidx = getelementptr [1024 x float], ptr @A, i64 0, i64 3
+ store <4 x float> zeroinitializer, ptr %arrayidx, align 4
%indvar.next = add i64 %indvar, 1
%exitcond = icmp ne i64 %indvar, 1024
br i1 %exitcond, label %for.body, label %for.end
diff --git a/llvm/test/Transforms/LICM/AArch64/sve-load-hoist.ll b/llvm/test/Transforms/LICM/AArch64/sve-load-hoist.ll
index c6c39a6446659..66caf877371ce 100644
--- a/llvm/test/Transforms/LICM/AArch64/sve-load-hoist.ll
+++ b/llvm/test/Transforms/LICM/AArch64/sve-load-hoist.ll
@@ -1,6 +1,6 @@
; RUN: opt -licm -mtriple aarch64-linux-gnu -mattr=+sve -S < %s | FileCheck %s
-define void @no_hoist_load1_nxv2i64(<vscale x 2 x i64>* %out, i8* %in8, i32 %n) {
+define void @no_hoist_load1_nxv2i64(ptr %out, ptr %in8, i32 %n) {
; CHECK-LABEL: @no_hoist_load1_nxv2i64(
; CHECK: entry:
; CHECK-NOT: load
@@ -8,16 +8,15 @@ define void @no_hoist_load1_nxv2i64(<vscale x 2 x i64>* %out, i8* %in8, i32 %n)
; CHECK: load
entry:
%cmp0 = icmp ugt i32 %n, 0
- %invst = call {}* @llvm.invariant.start.p0i8(i64 16, i8* %in8)
- %in = bitcast i8* %in8 to <vscale x 2 x i64>*
+ %invst = call ptr @llvm.invariant.start.p0(i64 16, ptr %in8)
br i1 %cmp0, label %for.body, label %for.end
for.body:
%i = phi i32 [0, %entry], [%inc, %for.body]
%i2 = zext i32 %i to i64
- %ptr = getelementptr <vscale x 2 x i64>, <vscale x 2 x i64>* %out, i64 %i2
- %val = load <vscale x 2 x i64>, <vscale x 2 x i64>* %in, align 16
- store <vscale x 2 x i64> %val, <vscale x 2 x i64>* %ptr, align 16
+ %ptr = getelementptr <vscale x 2 x i64>, ptr %out, i64 %i2
+ %val = load <vscale x 2 x i64>, ptr %in8, align 16
+ store <vscale x 2 x i64> %val, ptr %ptr, align 16
%inc = add nuw nsw i32 %i, 1
%cmp = icmp ult i32 %inc, %n
br i1 %cmp, label %for.body, label %for.end
@@ -26,7 +25,7 @@ for.end:
ret void
}
-define void @no_hoist_gather(<vscale x 2 x i32>* %out_ptr, <vscale x 2 x i32>* %in_ptr, <vscale x 2 x i64> %ptr_vec, i64 %n, <vscale x 2 x i1> %pred) {
+define void @no_hoist_gather(ptr %out_ptr, ptr %in_ptr, <vscale x 2 x i64> %ptr_vec, i64 %n, <vscale x 2 x i1> %pred) {
; CHECK-LABEL: @no_hoist_gather(
; CHECK: entry:
; CHECK-NOT: llvm.aarch64.sve.ld1.gather.scalar.offset
@@ -38,11 +37,11 @@ entry:
for.body:
%i = phi i64 [0, %entry], [%inc, %for.body]
%gather = call <vscale x 2 x i32> @llvm.aarch64.sve.ld1.gather.scalar.offset.nxv2i32.nxv2i64(<vscale x 2 x i1> %pred, <vscale x 2 x i64> %ptr_vec, i64 0)
- %in_ptr_gep = getelementptr <vscale x 2 x i32>, <vscale x 2 x i32>* %in_ptr, i64 %i
- %in_ptr_load = load <vscale x 2 x i32>, <vscale x 2 x i32>* %in_ptr_gep, align 8
+ %in_ptr_gep = getelementptr <vscale x 2 x i32>, ptr %in_ptr, i64 %i
+ %in_ptr_load = load <vscale x 2 x i32>, ptr %in_ptr_gep, align 8
%sum = add <vscale x 2 x i32> %gather, %in_ptr_load
- %out_ptr_gep = getelementptr <vscale x 2 x i32>, <vscale x 2 x i32>* %out_ptr, i64 %i
- store <vscale x 2 x i32> %sum, <vscale x 2 x i32>* %out_ptr_gep, align 8
+ %out_ptr_gep = getelementptr <vscale x 2 x i32>, ptr %out_ptr, i64 %i
+ store <vscale x 2 x i32> %sum, ptr %out_ptr_gep, align 8
%inc = add nuw nsw i64 %i, 1
%cmp = icmp ult i64 %inc, %n
br i1 %cmp, label %for.body, label %for.end
@@ -51,7 +50,7 @@ for.end:
ret void
}
-define void @no_hoist_scatter(<vscale x 2 x i32>* %out_ptr, <vscale x 2 x i32>* %in_ptr, <vscale x 2 x i64> %ptr_vec, i64 %n, <vscale x 2 x i1> %pred) {
+define void @no_hoist_scatter(ptr %out_ptr, ptr %in_ptr, <vscale x 2 x i64> %ptr_vec, i64 %n, <vscale x 2 x i1> %pred) {
; CHECK-LABEL: @no_hoist_scatter(
; CHECK: entry:
; CHECK-NOT: load
@@ -62,7 +61,7 @@ entry:
for.body:
%i = phi i64 [0, %entry], [%inc, %for.body]
- %in_ptr_load = load <vscale x 2 x i32>, <vscale x 2 x i32>* %in_ptr, align 8
+ %in_ptr_load = load <vscale x 2 x i32>, ptr %in_ptr, align 8
call void @llvm.aarch64.sve.st1.scatter.scalar.offset.nxv2i32.nxv2i64(<vscale x 2 x i32> %in_ptr_load, <vscale x 2 x i1> %pred, <vscale x 2 x i64> %ptr_vec, i64 %i)
%inc = add nuw nsw i64 %i, 1
%cmp = icmp ult i64 %inc, %n
@@ -72,7 +71,7 @@ for.end:
ret void
}
-declare {}* @llvm.invariant.start.p0i8(i64, i8* nocapture) nounwind readonly
+declare ptr @llvm.invariant.start.p0(i64, ptr nocapture) nounwind readonly
declare void @llvm.aarch64.sve.st1.scatter.scalar.offset.nxv2i32.nxv2i64(<vscale x 2 x i32>, <vscale x 2 x i1>, <vscale x 2 x i64>, i64)
diff --git a/llvm/test/Transforms/LICM/AMDGPU/bitcast.ll b/llvm/test/Transforms/LICM/AMDGPU/bitcast.ll
index 5f45465516bac..ea8bf696e565a 100644
--- a/llvm/test/Transforms/LICM/AMDGPU/bitcast.ll
+++ b/llvm/test/Transforms/LICM/AMDGPU/bitcast.ll
@@ -2,18 +2,18 @@
; CHECK-LABEL: foo
; CHECK: ret
-define void @foo(i8* %d, <1 x i32>* %s, i32 %idx) {
+define void @foo(ptr %d, ptr %s, i32 %idx) {
entry:
br label %for.body
for.body:
- %v0 = load <1 x i32>, <1 x i32>* %s
+ %v0 = load <1 x i32>, ptr %s
%v1 = bitcast <1 x i32> %v0 to <4 x i8>
br label %for.cond
for.cond:
%e0 = extractelement <4 x i8> %v1, i32 %idx
- store i8 %e0, i8* %d
+ store i8 %e0, ptr %d
br i1 false, label %for.exit, label %for.body
for.exit:
diff --git a/llvm/test/Transforms/LICM/AliasSetMemSet.ll b/llvm/test/Transforms/LICM/AliasSetMemSet.ll
index d60b321e278e2..0164c409fd9c7 100644
--- a/llvm/test/Transforms/LICM/AliasSetMemSet.ll
+++ b/llvm/test/Transforms/LICM/AliasSetMemSet.ll
@@ -14,9 +14,9 @@ bb6: ; preds = %bb4, %bb6
%k.4.04 = phi i8 [ 0, %bb4 ], [ %_tmp9, %bb6 ]
%_tmp31 = sext i8 %j.3.06 to i64
%_tmp4 = mul i64 %_tmp31, 10
- %_tmp5 = getelementptr i8, i8* undef, i64 %_tmp4
- %_tmp7 = getelementptr i8, i8* %_tmp5, i8 %k.4.04
- store i8 42, i8* %_tmp7
+ %_tmp5 = getelementptr i8, ptr undef, i64 %_tmp4
+ %_tmp7 = getelementptr i8, ptr %_tmp5, i8 %k.4.04
+ store i8 42, ptr %_tmp7
%_tmp9 = add i8 %k.4.04, 1
%_tmp11 = icmp slt i8 %_tmp9, 10
br i1 %_tmp11, label %bb6, label %bb7
diff --git a/llvm/test/Transforms/LICM/PR21582.ll b/llvm/test/Transforms/LICM/PR21582.ll
index 2fbbc66e57414..31277b1b4eb98 100644
--- a/llvm/test/Transforms/LICM/PR21582.ll
+++ b/llvm/test/Transforms/LICM/PR21582.ll
@@ -10,8 +10,8 @@ entry:
for.cond: ; preds = %for.end, %entry
; CHECK-LABEL: for.cond:
-; CHECK: store i32 0, i32* @b
- store i32 0, i32* @b, align 4
+; CHECK: store i32 0, ptr @b
+ store i32 0, ptr @b, align 4
br i1 true, label %for.body.preheader, label %for.end
for.body.preheader: ; preds = %for.cond
@@ -19,8 +19,7 @@ for.body.preheader: ; preds = %for.cond
for.body: ; preds = %for.body, %for.body.preheader
%g.15 = phi i32 [ undef, %for.body ], [ 0, %for.body.preheader ]
- %arrayidx2 = getelementptr inbounds i32, i32* @fn3.i, i64 0
- %0 = load i32, i32* %arrayidx2, align 4
+ %0 = load i32, ptr @fn3.i, align 4
%call = call i32 @g()
br i1 false, label %for.body, label %for.end.loopexit
@@ -34,7 +33,7 @@ for.end: ; preds = %for.end.loopexit, %
if.then: ; preds = %for.end
; CHECK-LABEL: if.then:
; CHECK: phi i32 [ {{.*}}, %for.end ]
-; CHECK-NOT: store i32 0, i32* @b
+; CHECK-NOT: store i32 0, ptr @b
; CHECK: ret i32
ret i32 %whatever
}
diff --git a/llvm/test/Transforms/LICM/allow-speculation-option.ll b/llvm/test/Transforms/LICM/allow-speculation-option.ll
index 46839cb19a061..cf36e013bdc83 100644
--- a/llvm/test/Transforms/LICM/allow-speculation-option.ll
+++ b/llvm/test/Transforms/LICM/allow-speculation-option.ll
@@ -3,19 +3,19 @@
; RUN: opt -passes='loop-mssa(lnicm<allowspeculation>)' -S %s | FileCheck --check-prefixes=COMMON,SPEC_ON %s
; RUN: opt -passes='loop-mssa(lnicm<no-allowspeculation>)' -S %s | FileCheck --check-prefixes=COMMON,SPEC_OFF %s
-define void @test([10 x i32]* %ptr, i32 %N) {
+define void @test(ptr %ptr, i32 %N) {
; COMMON-LABEL: @test(
; COMMON-NEXT: entry:
-; SPEC_ON-NEXT: [[GEP:%.*]] = getelementptr [10 x i32], [10 x i32]* [[PTR:%.*]], i32 0, i32 1
+; SPEC_ON-NEXT: [[GEP:%.*]] = getelementptr [10 x i32], ptr [[PTR:%.*]], i32 0, i32 1
; COMMON-NEXT: br label [[LOOP_HEADER:%.*]]
; COMMON: loop.header:
; COMMON-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]
; COMMON-NEXT: [[CMP:%.*]] = icmp ult i32 [[IV]], [[N:%.*]]
; COMMON-NEXT: br i1 [[CMP]], label [[LOOP_LATCH]], label [[EXIT:%.*]]
; COMMON: loop.latch:
-; SPEC_OFF-NEXT: [[GEP:%.*]] = getelementptr [10 x i32], [10 x i32]* [[PTR:%.*]], i32 0, i32 1
-; COMMON-NEXT: [[GEP_IV:%.*]] = getelementptr i32, i32* [[GEP]], i32 [[IV]]
-; COMMON-NEXT: store i32 9999, i32* [[GEP_IV]], align 4
+; SPEC_OFF-NEXT: [[GEP:%.*]] = getelementptr [10 x i32], ptr [[PTR:%.*]], i32 0, i32 1
+; COMMON-NEXT: [[GEP_IV:%.*]] = getelementptr i32, ptr [[GEP]], i32 [[IV]]
+; COMMON-NEXT: store i32 9999, ptr [[GEP_IV]], align 4
; COMMON-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
; COMMON-NEXT: br label [[LOOP_HEADER]]
; COMMON: exit:
@@ -30,9 +30,9 @@ loop.header:
br i1 %cmp, label %loop.latch, label %exit
loop.latch:
- %gep = getelementptr [10 x i32], [10 x i32]* %ptr, i32 0, i32 1
- %gep.iv = getelementptr i32, i32* %gep, i32 %iv
- store i32 9999, i32* %gep.iv
+ %gep = getelementptr [10 x i32], ptr %ptr, i32 0, i32 1
+ %gep.iv = getelementptr i32, ptr %gep, i32 %iv
+ store i32 9999, ptr %gep.iv
%iv.next = add i32 %iv, 1
br label %loop.header
diff --git a/llvm/test/Transforms/LICM/argmemonly-call.ll b/llvm/test/Transforms/LICM/argmemonly-call.ll
index 59b9c687d3351..89f762790bd8b 100644
--- a/llvm/test/Transforms/LICM/argmemonly-call.ll
+++ b/llvm/test/Transforms/LICM/argmemonly-call.ll
@@ -2,9 +2,9 @@
declare i32 @foo() readonly argmemonly nounwind
declare i32 @foo2() readonly nounwind
-declare i32 @bar(i32* %loc2) readonly argmemonly nounwind
+declare i32 @bar(ptr %loc2) readonly argmemonly nounwind
-define void @test(i32* %loc) {
+define void @test(ptr %loc) {
; CHECK-LABEL: @test
; CHECK: @foo
; CHECK-LABEL: loop:
@@ -12,12 +12,12 @@ define void @test(i32* %loc) {
loop:
%res = call i32 @foo()
- store i32 %res, i32* %loc
+ store i32 %res, ptr %loc
br label %loop
}
; Negative test: show argmemonly is required
-define void @test_neg(i32* %loc) {
+define void @test_neg(ptr %loc) {
; CHECK-LABEL: @test_neg
; CHECK-LABEL: loop:
; CHECK: @foo
@@ -25,99 +25,95 @@ define void @test_neg(i32* %loc) {
loop:
%res = call i32 @foo2()
- store i32 %res, i32* %loc
+ store i32 %res, ptr %loc
br label %loop
}
-define void @test2(i32* noalias %loc, i32* noalias %loc2) {
+define void @test2(ptr noalias %loc, ptr noalias %loc2) {
; CHECK-LABEL: @test2
; CHECK: @bar
; CHECK-LABEL: loop:
br label %loop
loop:
- %res = call i32 @bar(i32* %loc2)
- store i32 %res, i32* %loc
+ %res = call i32 @bar(ptr %loc2)
+ store i32 %res, ptr %loc
br label %loop
}
; Negative test: %might clobber gep
-define void @test3(i32* %loc) {
+define void @test3(ptr %loc) {
; CHECK-LABEL: @test3
; CHECK-LABEL: loop:
; CHECK: @bar
br label %loop
loop:
- %res = call i32 @bar(i32* %loc)
- %gep = getelementptr i32, i32 *%loc, i64 1000000
- store i32 %res, i32* %gep
+ %res = call i32 @bar(ptr %loc)
+ %gep = getelementptr i32, ptr %loc, i64 1000000
+ store i32 %res, ptr %gep
br label %loop
}
; Negative test: %loc might alias %loc2
-define void @test4(i32* %loc, i32* %loc2) {
+define void @test4(ptr %loc, ptr %loc2) {
; CHECK-LABEL: @test4
; CHECK-LABEL: loop:
; CHECK: @bar
br label %loop
loop:
- %res = call i32 @bar(i32* %loc2)
- store i32 %res, i32* %loc
+ %res = call i32 @bar(ptr %loc2)
+ store i32 %res, ptr %loc
br label %loop
}
-declare i32 @foo_new(i32*) readonly
+declare i32 @foo_new(ptr) readonly
-define void @test5(i32* %loc2, i32* noalias %loc) {
+define void @test5(ptr %loc2, ptr noalias %loc) {
; CHECK-LABEL: @test5
; CHECK: @bar
; CHECK-LABEL: loop:
br label %loop
loop:
- %res1 = call i32 @bar(i32* %loc2)
- %res = call i32 @foo_new(i32* %loc2)
- store volatile i32 %res1, i32* %loc
+ %res1 = call i32 @bar(ptr %loc2)
+ %res = call i32 @foo_new(ptr %loc2)
+ store volatile i32 %res1, ptr %loc
br label %loop
}
; memcpy doesn't write to it's source argument, so loads to that location
; can still be hoisted
-define void @test6(i32* noalias %loc, i32* noalias %loc2) {
+define void @test6(ptr noalias %loc, ptr noalias %loc2) {
; CHECK-LABEL: @test6
-; CHECK: %val = load i32, i32* %loc2
+; CHECK: %val = load i32, ptr %loc2
; CHECK-LABEL: loop:
; CHECK: @llvm.memcpy
br label %loop
loop:
- %val = load i32, i32* %loc2
- store i32 %val, i32* %loc
- %dest = bitcast i32* %loc to i8*
- %src = bitcast i32* %loc2 to i8*
- call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dest, i8* %src, i64 8, i1 false)
+ %val = load i32, ptr %loc2
+ store i32 %val, ptr %loc
+ call void @llvm.memcpy.p0.p0.i64(ptr %loc, ptr %loc2, i64 8, i1 false)
br label %loop
}
-define void @test7(i32* noalias %loc, i32* noalias %loc2) {
+define void @test7(ptr noalias %loc, ptr noalias %loc2) {
; CHECK-LABEL: @test7
-; CHECK: %val = load i32, i32* %loc2
+; CHECK: %val = load i32, ptr %loc2
; CHECK-LABEL: loop:
; CHECK: @custom_memcpy
br label %loop
loop:
- %val = load i32, i32* %loc2
- store i32 %val, i32* %loc
- %dest = bitcast i32* %loc to i8*
- %src = bitcast i32* %loc2 to i8*
- call void @custom_memcpy(i8* %dest, i8* %src)
+ %val = load i32, ptr %loc2
+ store i32 %val, ptr %loc
+ call void @custom_memcpy(ptr %loc, ptr %loc2)
br label %loop
}
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1)
-declare void @custom_memcpy(i8* nocapture writeonly, i8* nocapture readonly) argmemonly nounwind
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1)
+declare void @custom_memcpy(ptr nocapture writeonly, ptr nocapture readonly) argmemonly nounwind
diff --git a/llvm/test/Transforms/LICM/assume.ll b/llvm/test/Transforms/LICM/assume.ll
index 187ffb831893a..4fc1863aaabbf 100644
--- a/llvm/test/Transforms/LICM/assume.ll
+++ b/llvm/test/Transforms/LICM/assume.ll
@@ -33,11 +33,11 @@ for.end104:
ret void
}
-define void @f_1(i1 %cond, i32* %ptr) {
+define void @f_1(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @f_1(
; CHECK-LABEL: entry:
; CHECK: call void @llvm.assume(i1 %cond)
-; CHECK: %val = load i32, i32* %ptr
+; CHECK: %val = load i32, ptr %ptr
; CHECK-LABEL: loop:
entry:
@@ -46,19 +46,19 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
call void @llvm.assume(i1 %cond)
- %val = load i32, i32* %ptr
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
; Can't hoist because the call may throw and the assume
; may never execute.
-define void @f_2(i1 %cond, i32* %ptr) {
+define void @f_2(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @f_2(
; CHECK-LABEL: entry:
; CHECK-LABEL: loop:
; CHECK: call void @llvm.assume(i1 %cond)
-; CHECK: %val = load i32, i32* %ptr
+; CHECK: %val = load i32, ptr %ptr
entry:
br label %loop
@@ -67,17 +67,17 @@ loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
call void @maythrow()
call void @llvm.assume(i1 %cond)
- %val = load i32, i32* %ptr
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
; Note: resulting loop could be peeled and then hoisted, but
; by default assume is captured in phi cycle.
-define void @f_3(i1 %cond, i32* %ptr) {
+define void @f_3(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @f_3(
; CHECK-LABEL: entry:
-; CHECK: %val = load i32, i32* %ptr
+; CHECK: %val = load i32, ptr %ptr
; CHECK-LABEL: loop:
; CHECK: call void @llvm.assume(i1 %x.cmp)
@@ -88,7 +88,7 @@ loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
%x.cmp = phi i1 [%cond, %entry], [%cond.next, %loop]
call void @llvm.assume(i1 %x.cmp)
- %val = load i32, i32* %ptr
+ %val = load i32, ptr %ptr
%cond.next = icmp eq i32 %val, 5
%x.inc = add i32 %x, %val
br label %loop
diff --git a/llvm/test/Transforms/LICM/atomics.ll b/llvm/test/Transforms/LICM/atomics.ll
index c7ff0c46b9098..06946e0fdc78c 100644
--- a/llvm/test/Transforms/LICM/atomics.ll
+++ b/llvm/test/Transforms/LICM/atomics.ll
@@ -1,13 +1,13 @@
; RUN: opt -aa-pipeline=basic-aa -passes='require<opt-remark-emit>,loop-mssa(licm)' < %s -S | FileCheck %s
; Check that we can hoist unordered loads
-define i32 @test1(i32* nocapture %y) nounwind uwtable ssp {
+define i32 @test1(ptr nocapture %y) nounwind uwtable ssp {
entry:
br label %loop
loop:
%i = phi i32 [ %inc, %loop ], [ 0, %entry ]
- %val = load atomic i32, i32* %y unordered, align 4
+ %val = load atomic i32, ptr %y unordered, align 4
%inc = add nsw i32 %i, 1
%exitcond = icmp eq i32 %inc, %val
br i1 %exitcond, label %end, label %loop
@@ -22,12 +22,12 @@ end:
; Check that we don't sink/hoist monotonic loads
; (Strictly speaking, it's not forbidden, but it's supposed to be possible to
; use monotonic for spinlock-like constructs.)
-define i32 @test2(i32* nocapture %y) nounwind uwtable ssp {
+define i32 @test2(ptr nocapture %y) nounwind uwtable ssp {
entry:
br label %loop
loop:
- %val = load atomic i32, i32* %y monotonic, align 4
+ %val = load atomic i32, ptr %y monotonic, align 4
%exitcond = icmp ne i32 %val, 0
br i1 %exitcond, label %end, label %loop
@@ -42,31 +42,31 @@ end:
; Check that we hoist unordered around monotonic.
; (The noalias shouldn't be necessary in theory, but LICM isn't quite that
; smart yet.)
-define i32 @test3(i32* nocapture noalias %x, i32* nocapture %y) nounwind uwtable ssp {
+define i32 @test3(ptr nocapture noalias %x, ptr nocapture %y) nounwind uwtable ssp {
entry:
br label %loop
loop:
- %vala = load atomic i32, i32* %y monotonic, align 4
- %valb = load atomic i32, i32* %x unordered, align 4
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ %valb = load atomic i32, ptr %x unordered, align 4
%exitcond = icmp ne i32 %vala, %valb
br i1 %exitcond, label %end, label %loop
end:
ret i32 %vala
; CHECK-LABEL: define i32 @test3(
-; CHECK: load atomic i32, i32* %x unordered
+; CHECK: load atomic i32, ptr %x unordered
; CHECK-NEXT: br label %loop
}
; We can sink an unordered store
-define i32 @test4(i32* nocapture noalias %x, i32* nocapture %y) nounwind uwtable ssp {
+define i32 @test4(ptr nocapture noalias %x, ptr nocapture %y) nounwind uwtable ssp {
entry:
br label %loop
loop:
- %vala = load atomic i32, i32* %y monotonic, align 4
- store atomic i32 %vala, i32* %x unordered, align 4
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ store atomic i32 %vala, ptr %x unordered, align 4
%exitcond = icmp ne i32 %vala, 0
br i1 %exitcond, label %end, label %loop
@@ -74,98 +74,98 @@ end:
ret i32 %vala
; CHECK-LABEL: define i32 @test4(
; CHECK-LABEL: loop:
-; CHECK: load atomic i32, i32* %y monotonic
+; CHECK: load atomic i32, ptr %y monotonic
; CHECK-NOT: store
; CHECK-LABEL: end:
; CHECK-NEXT: %[[LCSSAPHI:.*]] = phi i32 [ %vala
-; CHECK: store atomic i32 %[[LCSSAPHI]], i32* %x unordered, align 4
+; CHECK: store atomic i32 %[[LCSSAPHI]], ptr %x unordered, align 4
}
; We currently don't handle ordered atomics.
-define i32 @test5(i32* nocapture noalias %x, i32* nocapture %y) nounwind uwtable ssp {
+define i32 @test5(ptr nocapture noalias %x, ptr nocapture %y) nounwind uwtable ssp {
entry:
br label %loop
loop:
- %vala = load atomic i32, i32* %y monotonic, align 4
- store atomic i32 %vala, i32* %x release, align 4
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ store atomic i32 %vala, ptr %x release, align 4
%exitcond = icmp ne i32 %vala, 0
br i1 %exitcond, label %end, label %loop
end:
ret i32 %vala
; CHECK-LABEL: define i32 @test5(
-; CHECK: load atomic i32, i32* %y monotonic
+; CHECK: load atomic i32, ptr %y monotonic
; CHECK-NEXT: store atomic
}
; We currently don't touch volatiles
-define i32 @test6(i32* nocapture noalias %x, i32* nocapture %y) nounwind uwtable ssp {
+define i32 @test6(ptr nocapture noalias %x, ptr nocapture %y) nounwind uwtable ssp {
entry:
br label %loop
loop:
- %vala = load atomic i32, i32* %y monotonic, align 4
- store volatile i32 %vala, i32* %x, align 4
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ store volatile i32 %vala, ptr %x, align 4
%exitcond = icmp ne i32 %vala, 0
br i1 %exitcond, label %end, label %loop
end:
ret i32 %vala
; CHECK-LABEL: define i32 @test6(
-; CHECK: load atomic i32, i32* %y monotonic
+; CHECK: load atomic i32, ptr %y monotonic
; CHECK-NEXT: store volatile
}
; We currently don't touch volatiles
-define i32 @test6b(i32* nocapture noalias %x, i32* nocapture %y) nounwind uwtable ssp {
+define i32 @test6b(ptr nocapture noalias %x, ptr nocapture %y) nounwind uwtable ssp {
entry:
br label %loop
loop:
- %vala = load atomic i32, i32* %y monotonic, align 4
- store atomic volatile i32 %vala, i32* %x unordered, align 4
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ store atomic volatile i32 %vala, ptr %x unordered, align 4
%exitcond = icmp ne i32 %vala, 0
br i1 %exitcond, label %end, label %loop
end:
ret i32 %vala
; CHECK-LABEL: define i32 @test6b(
-; CHECK: load atomic i32, i32* %y monotonic
+; CHECK: load atomic i32, ptr %y monotonic
; CHECK-NEXT: store atomic volatile
}
; Mixing unorder atomics and normal loads/stores is
; current unimplemented
-define i32 @test7(i32* nocapture noalias %x, i32* nocapture %y) nounwind uwtable ssp {
+define i32 @test7(ptr nocapture noalias %x, ptr nocapture %y) nounwind uwtable ssp {
entry:
br label %loop
loop:
- store i32 5, i32* %x
- %vala = load atomic i32, i32* %y monotonic, align 4
- store atomic i32 %vala, i32* %x unordered, align 4
+ store i32 5, ptr %x
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ store atomic i32 %vala, ptr %x unordered, align 4
%exitcond = icmp ne i32 %vala, 0
br i1 %exitcond, label %end, label %loop
end:
ret i32 %vala
; CHECK-LABEL: define i32 @test7(
-; CHECK: store i32 5, i32* %x
-; CHECK-NEXT: load atomic i32, i32* %y
+; CHECK: store i32 5, ptr %x
+; CHECK-NEXT: load atomic i32, ptr %y
; CHECK-NEXT: store atomic i32
}
; Three provably noalias locations - we can sink normal and unordered, but
; not monotonic
-define i32 @test7b(i32* nocapture noalias %x, i32* nocapture %y, i32* noalias nocapture %z) nounwind uwtable ssp {
+define i32 @test7b(ptr nocapture noalias %x, ptr nocapture %y, ptr noalias nocapture %z) nounwind uwtable ssp {
entry:
br label %loop
loop:
- store i32 5, i32* %x
- %vala = load atomic i32, i32* %y monotonic, align 4
- store atomic i32 %vala, i32* %z unordered, align 4
+ store i32 5, ptr %x
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ store atomic i32 %vala, ptr %z unordered, align 4
%exitcond = icmp ne i32 %vala, 0
br i1 %exitcond, label %end, label %loop
@@ -173,20 +173,20 @@ end:
ret i32 %vala
; CHECK-LABEL: define i32 @test7b(
; CHECK-LABEL: loop:
-; CHECK: load atomic i32, i32* %y monotonic
+; CHECK: load atomic i32, ptr %y monotonic
; CHECK-LABEL: end:
-; CHECK: store i32 5, i32* %x
-; CHECK: store atomic i32 %{{.+}}, i32* %z unordered, align 4
+; CHECK: store i32 5, ptr %x
+; CHECK: store atomic i32 %{{.+}}, ptr %z unordered, align 4
}
-define i32 @test8(i32* nocapture noalias %x, i32* nocapture %y) {
+define i32 @test8(ptr nocapture noalias %x, ptr nocapture %y) {
entry:
br label %loop
loop:
- %vala = load atomic i32, i32* %y monotonic, align 4
- store atomic i32 %vala, i32* %x unordered, align 4
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ store atomic i32 %vala, ptr %x unordered, align 4
fence release
%exitcond = icmp ne i32 %vala, 0
br i1 %exitcond, label %end, label %loop
@@ -195,20 +195,20 @@ end:
ret i32 %vala
; CHECK-LABEL: define i32 @test8(
; CHECK-LABEL: loop:
-; CHECK: load atomic i32, i32* %y monotonic
+; CHECK: load atomic i32, ptr %y monotonic
; CHECK-NEXT: store atomic
; CHECK-NEXT: fence
}
; Exact semantics of monotonic accesses are a bit vague in the C++ spec,
; for the moment, be conservative and don't touch them.
-define i32 @test9(i32* nocapture noalias %x, i32* nocapture %y) {
+define i32 @test9(ptr nocapture noalias %x, ptr nocapture %y) {
entry:
br label %loop
loop:
- %vala = load atomic i32, i32* %y monotonic, align 4
- store atomic i32 %vala, i32* %x monotonic, align 4
+ %vala = load atomic i32, ptr %y monotonic, align 4
+ store atomic i32 %vala, ptr %x monotonic, align 4
%exitcond = icmp ne i32 %vala, 0
br i1 %exitcond, label %end, label %loop
@@ -216,6 +216,6 @@ end:
ret i32 %vala
; CHECK-LABEL: define i32 @test9(
; CHECK-LABEL: loop:
-; CHECK: load atomic i32, i32* %y monotonic
-; CHECK-NEXT: store atomic i32 %vala, i32* %x monotonic, align 4
+; CHECK: load atomic i32, ptr %y monotonic
+; CHECK-NEXT: store atomic i32 %vala, ptr %x monotonic, align 4
}
diff --git a/llvm/test/Transforms/LICM/call-hoisting.ll b/llvm/test/Transforms/LICM/call-hoisting.ll
index 084d8e21f8616..cc5d0f83d3be8 100644
--- a/llvm/test/Transforms/LICM/call-hoisting.ll
+++ b/llvm/test/Transforms/LICM/call-hoisting.ll
@@ -1,9 +1,9 @@
; RUN: opt -S -basic-aa -licm %s | FileCheck %s
; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' < %s -S | FileCheck %s
-declare i32 @load(i32* %p) argmemonly readonly nounwind
+declare i32 @load(ptr %p) argmemonly readonly nounwind
-define void @test_load(i32* noalias %loc, i32* noalias %sink) {
+define void @test_load(ptr noalias %loc, ptr noalias %sink) {
; CHECK-LABEL: @test_load
; CHECK-LABEL: entry:
; CHECK: call i32 @load
@@ -13,8 +13,8 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- %ret = call i32 @load(i32* %loc)
- store volatile i32 %ret, i32* %sink
+ %ret = call i32 @load(ptr %loc)
+ store volatile i32 %ret, ptr %sink
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -23,18 +23,18 @@ exit:
ret void
}
-declare i32 @spec(i32* %p, i32* %q) readonly argmemonly nounwind speculatable
+declare i32 @spec(ptr %p, ptr %q) readonly argmemonly nounwind speculatable
; We should strip the dereferenceable callsite attribute on spec call's argument since it is
; can cause UB in the speculatable call when hoisted to preheader.
; However, we need not strip the nonnull attribute since it just propagates
; poison if the parameter was indeed null.
-define void @test_strip_attribute(i32* noalias %loc, i32* noalias %sink, i32* %q) {
+define void @test_strip_attribute(ptr noalias %loc, ptr noalias %sink, ptr %q) {
; CHECK-LABEL: @test_strip_attribute(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[RET:%.*]] = call i32 @load(i32* [[LOC:%.*]])
-; CHECK-NEXT: [[NULLCHK:%.*]] = icmp eq i32* [[Q:%.*]], null
-; CHECK-NEXT: [[RET2:%.*]] = call i32 @spec(i32* nonnull [[Q]], i32* [[LOC]])
+; CHECK-NEXT: [[RET:%.*]] = call i32 @load(ptr [[LOC:%.*]])
+; CHECK-NEXT: [[NULLCHK:%.*]] = icmp eq ptr [[Q:%.*]], null
+; CHECK-NEXT: [[RET2:%.*]] = call i32 @spec(ptr nonnull [[Q]], ptr [[LOC]])
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[ISNULL:%.*]] ]
@@ -44,16 +44,16 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %isnull ]
- %ret = call i32 @load(i32* %loc)
- %nullchk = icmp eq i32* %q, null
+ %ret = call i32 @load(ptr %loc)
+ %nullchk = icmp eq ptr %q, null
br i1 %nullchk, label %isnull, label %nonnullbb
nonnullbb:
- %ret2 = call i32 @spec(i32* nonnull %q, i32* dereferenceable(12) %loc)
+ %ret2 = call i32 @spec(ptr nonnull %q, ptr dereferenceable(12) %loc)
br label %isnull
isnull:
- store volatile i32 %ret, i32* %sink
+ store volatile i32 %ret, ptr %sink
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -62,9 +62,9 @@ exit:
ret void
}
-declare void @store(i32 %val, i32* %p) argmemonly writeonly nounwind
+declare void @store(i32 %val, ptr %p) argmemonly writeonly nounwind
-define void @test(i32* %loc) {
+define void @test(ptr %loc) {
; CHECK-LABEL: @test
; CHECK-LABEL: loop:
; CHECK: call void @store
@@ -74,7 +74,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- call void @store(i32 0, i32* %loc)
+ call void @store(i32 0, ptr %loc)
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -83,7 +83,7 @@ exit:
ret void
}
-define void @test_multiexit(i32* %loc, i1 %earlycnd) {
+define void @test_multiexit(ptr %loc, i1 %earlycnd) {
; CHECK-LABEL: @test_multiexit
; CHECK-LABEL: loop:
; CHECK: call void @store
@@ -93,7 +93,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %backedge]
- call void @store(i32 0, i32* %loc)
+ call void @store(i32 0, ptr %loc)
%iv.next = add i32 %iv, 1
br i1 %earlycnd, label %exit1, label %backedge
@@ -107,7 +107,7 @@ exit2:
ret void
}
-define void @neg_lv_value(i32* %loc) {
+define void @neg_lv_value(ptr %loc) {
; CHECK-LABEL: @neg_lv_value
; CHECK-LABEL: loop:
; CHECK: call void @store
@@ -117,7 +117,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- call void @store(i32 %iv, i32* %loc)
+ call void @store(i32 %iv, ptr %loc)
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -126,7 +126,7 @@ exit:
ret void
}
-define void @neg_lv_addr(i32* %loc) {
+define void @neg_lv_addr(ptr %loc) {
; CHECK-LABEL: @neg_lv_addr
; CHECK-LABEL: loop:
; CHECK: call void @store
@@ -136,8 +136,8 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- %p = getelementptr i32, i32* %loc, i32 %iv
- call void @store(i32 0, i32* %p)
+ %p = getelementptr i32, ptr %loc, i32 %iv
+ call void @store(i32 0, ptr %p)
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -146,7 +146,7 @@ exit:
ret void
}
-define void @neg_mod(i32* %loc) {
+define void @neg_mod(ptr %loc) {
; CHECK-LABEL: @neg_mod
; CHECK-LABEL: loop:
; CHECK: call void @store
@@ -156,8 +156,8 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- call void @store(i32 0, i32* %loc)
- store i32 %iv, i32* %loc
+ call void @store(i32 0, ptr %loc)
+ store i32 %iv, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -166,7 +166,7 @@ exit:
ret void
}
-define void @neg_ref(i32* %loc) {
+define void @neg_ref(ptr %loc) {
; CHECK-LABEL: @neg_ref
; CHECK-LABEL: loop:
; CHECK: call void @store
@@ -176,8 +176,8 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %backedge]
- call void @store(i32 0, i32* %loc)
- %v = load i32, i32* %loc
+ call void @store(i32 0, ptr %loc)
+ %v = load i32, ptr %loc
%earlycnd = icmp eq i32 %v, 198
br i1 %earlycnd, label %exit1, label %backedge
@@ -194,7 +194,7 @@ exit2:
declare void @modref()
-define void @neg_modref(i32* %loc) {
+define void @neg_modref(ptr %loc) {
; CHECK-LABEL: @neg_modref
; CHECK-LABEL: loop:
; CHECK: call void @store
@@ -204,7 +204,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- call void @store(i32 0, i32* %loc)
+ call void @store(i32 0, ptr %loc)
call void @modref()
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
@@ -214,7 +214,7 @@ exit:
ret void
}
-define void @neg_fence(i32* %loc) {
+define void @neg_fence(ptr %loc) {
; CHECK-LABEL: @neg_fence
; CHECK-LABEL: loop:
; CHECK: call void @store
@@ -224,7 +224,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- call void @store(i32 0, i32* %loc)
+ call void @store(i32 0, ptr %loc)
fence seq_cst
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
@@ -234,11 +234,11 @@ exit:
ret void
}
-declare void @not_nounwind(i32 %v, i32* %p) writeonly argmemonly
-declare void @not_argmemonly(i32 %v, i32* %p) writeonly nounwind
-declare void @not_writeonly(i32 %v, i32* %p) argmemonly nounwind
+declare void @not_nounwind(i32 %v, ptr %p) writeonly argmemonly
+declare void @not_argmemonly(i32 %v, ptr %p) writeonly nounwind
+declare void @not_writeonly(i32 %v, ptr %p) argmemonly nounwind
-define void @neg_not_nounwind(i32* %loc) {
+define void @neg_not_nounwind(ptr %loc) {
; CHECK-LABEL: @neg_not_nounwind
; CHECK-LABEL: loop:
; CHECK: call void @not_nounwind
@@ -248,7 +248,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- call void @not_nounwind(i32 0, i32* %loc)
+ call void @not_nounwind(i32 0, ptr %loc)
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -257,7 +257,7 @@ exit:
ret void
}
-define void @neg_not_argmemonly(i32* %loc) {
+define void @neg_not_argmemonly(ptr %loc) {
; CHECK-LABEL: @neg_not_argmemonly
; CHECK-LABEL: loop:
; CHECK: call void @not_argmemonly
@@ -267,7 +267,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- call void @not_argmemonly(i32 0, i32* %loc)
+ call void @not_argmemonly(i32 0, ptr %loc)
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -276,7 +276,7 @@ exit:
ret void
}
-define void @neg_not_writeonly(i32* %loc) {
+define void @neg_not_writeonly(ptr %loc) {
; CHECK-LABEL: @neg_not_writeonly
; CHECK-LABEL: loop:
; CHECK: call void @not_writeonly
@@ -286,7 +286,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- call void @not_writeonly(i32 0, i32* %loc)
+ call void @not_writeonly(i32 0, ptr %loc)
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
diff --git a/llvm/test/Transforms/LICM/constexpr.ll b/llvm/test/Transforms/LICM/constexpr.ll
index 40d2ef25e8196..7871a47a572b0 100644
--- a/llvm/test/Transforms/LICM/constexpr.ll
+++ b/llvm/test/Transforms/LICM/constexpr.ll
@@ -5,12 +5,12 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"
- at in = internal unnamed_addr global i32* null, align 8
- at out = internal unnamed_addr global i32* null, align 8
+ at in = internal unnamed_addr global ptr null, align 8
+ at out = internal unnamed_addr global ptr null, align 8
; CHECK-LABEL: @bar
; CHECK: entry:
-; CHECK: load i64, i64* bitcast (i32** @in to i64*)
+; CHECK: load i64, ptr @in
; CHECK: do.body:
; CHECK-NOT: load
@@ -25,18 +25,18 @@ do.body: ; preds = %l2, %entry
br i1 %c, label %l1, label %do.body.l2_crit_edge
do.body.l2_crit_edge: ; preds = %do.body
- %inval.pre = load i32*, i32** @in, align 8
+ %inval.pre = load ptr, ptr @in, align 8
br label %l2
l1: ; preds = %do.body
- %v1 = load i64, i64* bitcast (i32** @in to i64*), align 8
- store i64 %v1, i64* bitcast (i32** @out to i64*), align 8
- %0 = inttoptr i64 %v1 to i32*
+ %v1 = load i64, ptr @in, align 8
+ store i64 %v1, ptr @out, align 8
+ %0 = inttoptr i64 %v1 to ptr
br label %l2
l2: ; preds = %do.body.l2_crit_edge, %l1
- %inval = phi i32* [ %inval.pre, %do.body.l2_crit_edge ], [ %0, %l1 ]
- %int = ptrtoint i32* %inval to i64
+ %inval = phi ptr [ %inval.pre, %do.body.l2_crit_edge ], [ %0, %l1 ]
+ %int = ptrtoint ptr %inval to i64
%next = add i64 %total, %int
%inc = add nsw i32 %i.0, 1
%cmp = icmp slt i32 %inc, %N
diff --git a/llvm/test/Transforms/LICM/convergent.ll b/llvm/test/Transforms/LICM/convergent.ll
index 9ff95bf1d320f..c3d92881a2927 100644
--- a/llvm/test/Transforms/LICM/convergent.ll
+++ b/llvm/test/Transforms/LICM/convergent.ll
@@ -5,7 +5,7 @@
; CHECK: loop:
; CHECK: call i32 @f
-define i32 @test(i32* nocapture noalias %x, i32* nocapture %y) {
+define i32 @test(ptr nocapture noalias %x, ptr nocapture %y) {
entry:
br label %loop
diff --git a/llvm/test/Transforms/LICM/crash.ll b/llvm/test/Transforms/LICM/crash.ll
index 607449b821ad0..e724e556be855 100644
--- a/llvm/test/Transforms/LICM/crash.ll
+++ b/llvm/test/Transforms/LICM/crash.ll
@@ -12,12 +12,12 @@ entry:
br label %for.body
for.body: ; preds = %for.cond, %bb.nph
- store i8 0, i8* @g_12, align 1
- %tmp6 = load i8, i8* @g_12, align 1
+ store i8 0, ptr @g_12, align 1
+ %tmp6 = load i8, ptr @g_12, align 1
br label %for.cond
for.cond: ; preds = %for.body
- store i8 %tmp6, i8* @g_12, align 1
+ store i8 %tmp6, ptr @g_12, align 1
br i1 false, label %for.cond.for.end10_crit_edge, label %for.body
for.cond.for.end10_crit_edge: ; preds = %for.cond
@@ -35,31 +35,29 @@ entry:
br label %for.body
for.body: ; preds = %for.body, %entry
- %tmp7 = load i32, i32* @g_8, align 4
- store i32* @g_8, i32** undef, align 16
- store i32 undef, i32* @g_8, align 4
+ %tmp7 = load i32, ptr @g_8, align 4
+ store ptr @g_8, ptr undef, align 16
+ store i32 undef, ptr @g_8, align 4
br label %for.body
}
; PR8102
define void @test3() {
entry:
- %__first = alloca { i32* }
+ %__first = alloca { ptr }
br i1 undef, label %for.cond, label %for.end
for.cond: ; preds = %for.cond, %entry
- %tmp1 = getelementptr { i32*}, { i32*}* %__first, i32 0, i32 0
- %tmp2 = load i32*, i32** %tmp1, align 4
- %call = tail call i32* @test3helper(i32* %tmp2)
- %tmp3 = getelementptr { i32*}, { i32*}* %__first, i32 0, i32 0
- store i32* %call, i32** %tmp3, align 4
+ %tmp2 = load ptr, ptr %__first, align 4
+ %call = tail call ptr @test3helper(ptr %tmp2)
+ store ptr %call, ptr %__first, align 4
br i1 false, label %for.cond, label %for.end
for.end: ; preds = %for.cond, %entry
ret void
}
-declare i32* @test3helper(i32*)
+declare ptr @test3helper(ptr)
; PR8602
@@ -69,8 +67,8 @@ define void @test4() noreturn nounwind {
br label %1
; <label>:1 ; preds = %1, %0
- store volatile i32* @g_47, i32** undef, align 8
- store i32 undef, i32* @g_47, align 4
+ store volatile ptr @g_47, ptr undef, align 8
+ store i32 undef, ptr @g_47, align 4
br label %1
}
diff --git a/llvm/test/Transforms/LICM/dropped-tbaa.ll b/llvm/test/Transforms/LICM/dropped-tbaa.ll
index 3297cc0b305a5..9c47435372dfa 100644
--- a/llvm/test/Transforms/LICM/dropped-tbaa.ll
+++ b/llvm/test/Transforms/LICM/dropped-tbaa.ll
@@ -3,11 +3,11 @@
; This test case case is generated from the following C code with -fstrict-aliasing,
; and after passing through -inline -mem2reg -loop-rotate -instcombine
-; void add(double *restrict data, int *restrict addend) {
+; void add(ptr restrict data, int *restrict addend) {
; *data += *addend;
; }
;
-; void foo(double *data, int *addend) {
+; void foo(ptr data, int *addend) {
; for (int i = 0; i < 1000; ++i) {
; *data += *addend;
; add(data, addend);
@@ -16,17 +16,16 @@
; We want to make sure the load of addend gets hoisted, independent of the second load
; load having
diff erent noalias metadata.
-define void @foo(double* %data, i32* %addend) #0 {
+define void @foo(ptr %data, ptr %addend) #0 {
; CHECK: for.body.lr.ph:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ADDEND:%.*]], align 4, !tbaa !1
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ADDEND:%.*]], align 4, !tbaa !1
; CHECK-NEXT: [[CONV:%.*]] = sitofp i32 [[TMP1]] to double
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ADDEND]], align 4, !tbaa !1, !alias.scope !5, !noalias !8
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ADDEND]], align 4, !tbaa !1, !alias.scope !5, !noalias !8
; CHECK-NEXT: [[CONV_I:%.*]] = sitofp i32 [[TMP2]] to double
entry:
%i = alloca i32, align 4
- %0 = bitcast i32* %i to i8*
- call void @llvm.lifetime.start.p0i8(i64 4, i8* %0) #2
- store i32 0, i32* %i, align 4, !tbaa !1
+ call void @llvm.lifetime.start.p0(i64 4, ptr %i) #2
+ store i32 0, ptr %i, align 4, !tbaa !1
br i1 true, label %for.body.lr.ph, label %for.cond.cleanup
for.body.lr.ph: ; preds = %entry
@@ -36,32 +35,31 @@ for.cond.for.cond.cleanup_crit_edge: ; preds = %for.inc
br label %for.cond.cleanup
for.cond.cleanup: ; preds = %for.cond.for.cond.cleanup_crit_edge, %entry
- %1 = bitcast i32* %i to i8*
- call void @llvm.lifetime.end.p0i8(i64 4, i8* %1) #2
+ call void @llvm.lifetime.end.p0(i64 4, ptr %i) #2
br label %for.end
for.body: ; preds = %for.body.lr.ph, %for.inc
- %2 = load i32, i32* %addend, align 4, !tbaa !1
- %conv = sitofp i32 %2 to double
- %3 = load i32, i32* %i, align 4, !tbaa !1
- %idxprom = sext i32 %3 to i64
- %arrayidx = getelementptr inbounds double, double* %data, i64 %idxprom
- %4 = load double, double* %arrayidx, align 8, !tbaa !5
- %add = fadd double %4, %conv
- store double %add, double* %arrayidx, align 8, !tbaa !5
- %idxprom1 = sext i32 %3 to i64
- %arrayidx2 = getelementptr inbounds double, double* %data, i64 %idxprom1
- %5 = load i32, i32* %addend, align 4, !tbaa !1, !alias.scope !7, !noalias !10
- %conv.i = sitofp i32 %5 to double
- %6 = load double, double* %arrayidx2, align 8, !tbaa !5, !alias.scope !10, !noalias !7
- %add.i = fadd double %6, %conv.i
- store double %add.i, double* %arrayidx2, align 8, !tbaa !5, !alias.scope !10, !noalias !7
+ %0 = load i32, ptr %addend, align 4, !tbaa !1
+ %conv = sitofp i32 %0 to double
+ %1 = load i32, ptr %i, align 4, !tbaa !1
+ %idxprom = sext i32 %1 to i64
+ %arrayidx = getelementptr inbounds double, ptr %data, i64 %idxprom
+ %2 = load double, ptr %arrayidx, align 8, !tbaa !5
+ %add = fadd double %2, %conv
+ store double %add, ptr %arrayidx, align 8, !tbaa !5
+ %idxprom1 = sext i32 %1 to i64
+ %arrayidx2 = getelementptr inbounds double, ptr %data, i64 %idxprom1
+ %3 = load i32, ptr %addend, align 4, !tbaa !1, !alias.scope !7, !noalias !10
+ %conv.i = sitofp i32 %3 to double
+ %4 = load double, ptr %arrayidx2, align 8, !tbaa !5, !alias.scope !10, !noalias !7
+ %add.i = fadd double %4, %conv.i
+ store double %add.i, ptr %arrayidx2, align 8, !tbaa !5, !alias.scope !10, !noalias !7
br label %for.inc
for.inc: ; preds = %for.body
- %7 = load i32, i32* %i, align 4, !tbaa !1
- %inc = add nsw i32 %7, 1
- store i32 %inc, i32* %i, align 4, !tbaa !1
+ %5 = load i32, ptr %i, align 4, !tbaa !1
+ %inc = add nsw i32 %5, 1
+ store i32 %inc, ptr %i, align 4, !tbaa !1
%cmp = icmp slt i32 %inc, 1000
br i1 %cmp, label %for.body, label %for.cond.for.cond.cleanup_crit_edge
@@ -69,8 +67,8 @@ for.end: ; preds = %for.cond.cleanup
ret void
}
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #0
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #0
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #0
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #0
attributes #0 = { argmemonly nounwind }
diff --git a/llvm/test/Transforms/LICM/explicit_guards.ll b/llvm/test/Transforms/LICM/explicit_guards.ll
index ffc6b55e26a20..c8fffb9a7acc9 100644
--- a/llvm/test/Transforms/LICM/explicit_guards.ll
+++ b/llvm/test/Transforms/LICM/explicit_guards.ll
@@ -79,10 +79,10 @@ exit:
}
-define void @hoist_invariant_load(i1 %cond, i32* %np, i32 %M) {
+define void @hoist_invariant_load(i1 %cond, ptr %np, i32 %M) {
; CHECK-LABEL: @hoist_invariant_load(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[N:%.*]] = load i32, i32* [[NP:%.*]]
+; CHECK-NEXT: [[N:%.*]] = load i32, ptr [[NP:%.*]]
; CHECK-NEXT: [[WIDENABLE_COND:%.*]] = call i1 @llvm.experimental.widenable.condition()
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
@@ -105,7 +105,7 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
- %N = load i32, i32* %np
+ %N = load i32, ptr %np
%guard_cond = icmp slt i32 %iv, %N
call void(i1, ...) @llvm.experimental.guard(i1 %guard_cond) [ "deopt"() ]
%loop_cond = icmp slt i32 %iv, %M
diff --git a/llvm/test/Transforms/LICM/fence.ll b/llvm/test/Transforms/LICM/fence.ll
index a4883b8bf7e39..476b12cdb482f 100644
--- a/llvm/test/Transforms/LICM/fence.ll
+++ b/llvm/test/Transforms/LICM/fence.ll
@@ -65,7 +65,7 @@ exit:
ret void
}
-define void @testneg1(i64 %n, i64* %p) {
+define void @testneg1(i64 %n, ptr %p) {
; CHECK-LABEL: @testneg1
; CHECK-LABEL: loop:
; CHECK: fence
@@ -73,7 +73,7 @@ entry:
br label %loop
loop:
%iv = phi i64 [0, %entry], [%iv.next, %loop]
- store i64 %iv, i64* %p
+ store i64 %iv, ptr %p
fence release
%iv.next = add i64 %iv, 1
%test = icmp slt i64 %iv, %n
@@ -82,7 +82,7 @@ exit:
ret void
}
-define void @testneg2(i64* %p) {
+define void @testneg2(ptr %p) {
; CHECK-LABEL: @testneg2
; CHECK-LABEL: loop:
; CHECK: fence
@@ -91,7 +91,7 @@ entry:
loop:
%iv = phi i64 [0, %entry], [%iv.next, %loop]
fence acquire
- %n = load i64, i64* %p
+ %n = load i64, ptr %p
%iv.next = add i64 %iv, 1
%test = icmp slt i64 %iv, %n
br i1 %test, label %loop, label %exit
@@ -101,7 +101,7 @@ exit:
; Note: While a false negative for LICM on it's own, O3 does get this
; case by combining the fences.
-define void @testfn1(i64 %n, i64* %p) {
+define void @testfn1(i64 %n, ptr %p) {
; CHECK-LABEL: @testfn1
; CHECK-LABEL: loop:
; CHECK: fence
diff --git a/llvm/test/Transforms/LICM/funclet.ll b/llvm/test/Transforms/LICM/funclet.ll
index d808cd9a0f50c..f863da6f26cf8 100644
--- a/llvm/test/Transforms/LICM/funclet.ll
+++ b/llvm/test/Transforms/LICM/funclet.ll
@@ -5,7 +5,7 @@
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i386-pc-windows-msvc18.0.0"
-define void @test1(i32* %s, i1 %b) personality i32 (...)* @__CxxFrameHandler3 {
+define void @test1(ptr %s, i1 %b) personality ptr @__CxxFrameHandler3 {
; CHECK-LABEL: @test1(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[TMP0:%.*]] = call i32 @pure_computation()
@@ -19,8 +19,8 @@ define void @test1(i32* %s, i1 %b) personality i32 (...)* @__CxxFrameHandler3 {
; CHECK-NEXT: [[DOTLCSSA1:%.*]] = phi i32 [ [[TMP0]], [[WHILE_BODY]] ]
; CHECK-NEXT: [[CS:%.*]] = catchswitch within none [label %catch] unwind to caller
; CHECK: catch:
-; CHECK-NEXT: [[CP:%.*]] = catchpad within [[CS]] [i8* null, i32 64, i8* null]
-; CHECK-NEXT: store i32 [[DOTLCSSA1]], i32* [[S:%.*]], align 4
+; CHECK-NEXT: [[CP:%.*]] = catchpad within [[CS]] [ptr null, i32 64, ptr null]
+; CHECK-NEXT: store i32 [[DOTLCSSA1]], ptr [[S:%.*]], align 4
; CHECK-NEXT: catchret from [[CP]] to label [[TRY_CONT:%.*]]
; CHECK: try.cont.loopexit:
; CHECK-NEXT: br label [[TRY_CONT]]
@@ -43,15 +43,15 @@ catch.dispatch: ; preds = %while.body
%cs = catchswitch within none [label %catch] unwind to caller
catch: ; preds = %catch.dispatch
- %cp = catchpad within %cs [i8* null, i32 64, i8* null]
- store i32 %.lcssa1, i32* %s
+ %cp = catchpad within %cs [ptr null, i32 64, ptr null]
+ store i32 %.lcssa1, ptr %s
catchret from %cp to label %try.cont
try.cont: ; preds = %catch, %while.cond
ret void
}
-define void @test2(i32* %s, i1 %b) personality i32 (...)* @__CxxFrameHandler3 {
+define void @test2(ptr %s, i1 %b) personality ptr @__CxxFrameHandler3 {
; CHECK-LABEL: @test2(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[WHILE_COND:%.*]]
@@ -63,7 +63,7 @@ define void @test2(i32* %s, i1 %b) personality i32 (...)* @__CxxFrameHandler3 {
; CHECK: catch.dispatch:
; CHECK-NEXT: [[CP:%.*]] = cleanuppad within none []
; CHECK-NEXT: [[TMP0:%.*]] = call i32 @pure_computation() [ "funclet"(token [[CP]]) ]
-; CHECK-NEXT: store i32 [[TMP0]], i32* [[S:%.*]], align 4
+; CHECK-NEXT: store i32 [[TMP0]], ptr [[S:%.*]], align 4
; CHECK-NEXT: cleanupret from [[CP]] unwind to caller
; CHECK: try.cont:
; CHECK-NEXT: ret void
@@ -82,27 +82,25 @@ while.body: ; preds = %while.cond
catch.dispatch: ; preds = %while.body
%.lcssa1 = phi i32 [ %0, %while.body ]
%cp = cleanuppad within none []
- store i32 %.lcssa1, i32* %s
+ store i32 %.lcssa1, ptr %s
cleanupret from %cp unwind to caller
try.cont: ; preds = %catch, %while.cond
ret void
}
-define void @test3(i1 %a, i1 %b, i1 %c) personality i32 (...)* @__CxxFrameHandler3 {
+define void @test3(i1 %a, i1 %b, i1 %c) personality ptr @__CxxFrameHandler3 {
; CHECK-LABEL: @test3(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[DOTFRAME:%.*]] = alloca i8, align 4
; CHECK-NEXT: [[DOTFRAME2:%.*]] = alloca i8, align 4
-; CHECK-NEXT: [[BC:%.*]] = bitcast i8* [[DOTFRAME]] to i32*
-; CHECK-NEXT: [[BC2:%.*]] = bitcast i8* [[DOTFRAME2]] to i32*
; CHECK-NEXT: br i1 [[A:%.*]], label [[TRY_SUCCESS_OR_CAUGHT:%.*]], label [[FORBODY_PREHEADER:%.*]]
; CHECK: forbody.preheader:
-; CHECK-NEXT: store i32 1, i32* [[BC]], align 4
-; CHECK-NEXT: store i32 2, i32* [[BC2]], align 4
+; CHECK-NEXT: store i32 1, ptr [[DOTFRAME]], align 4
+; CHECK-NEXT: store i32 2, ptr [[DOTFRAME2]], align 4
; CHECK-NEXT: br label [[FORBODY:%.*]]
; CHECK: catch.object.Throwable:
-; CHECK-NEXT: [[CP:%.*]] = catchpad within [[CS:%.*]] [i8* null, i32 64, i8* null]
+; CHECK-NEXT: [[CP:%.*]] = catchpad within [[CS:%.*]] [ptr null, i32 64, ptr null]
; CHECK-NEXT: unreachable
; CHECK: try.success.or.caught.loopexit:
; CHECK-NEXT: br label [[TRY_SUCCESS_OR_CAUGHT]]
@@ -124,12 +122,10 @@ define void @test3(i1 %a, i1 %b, i1 %c) personality i32 (...)* @__CxxFrameHandle
entry:
%.frame = alloca i8, align 4
%.frame2 = alloca i8, align 4
- %bc = bitcast i8* %.frame to i32*
- %bc2 = bitcast i8* %.frame2 to i32*
br i1 %a, label %try.success.or.caught, label %forbody
catch.object.Throwable: ; preds = %catch.dispatch
- %cp = catchpad within %cs [i8* null, i32 64, i8* null]
+ %cp = catchpad within %cs [ptr null, i32 64, ptr null]
unreachable
try.success.or.caught: ; preds = %forcond.backedge, %0
@@ -145,8 +141,8 @@ catch.dispatch: ; preds = %else, %forbody
%cs = catchswitch within none [label %catch.object.Throwable] unwind to caller
forbody: ; preds = %forcond.backedge, %0
- store i32 1, i32* %bc, align 4
- store i32 2, i32* %bc2, align 4
+ store i32 1, ptr %.frame, align 4
+ store i32 2, ptr %.frame2, align 4
invoke void @may_throw()
to label %postinvoke unwind label %catch.dispatch
diff --git a/llvm/test/Transforms/LICM/gc-relocate.ll b/llvm/test/Transforms/LICM/gc-relocate.ll
index 826985ebce80c..ca2090e9a88a7 100644
--- a/llvm/test/Transforms/LICM/gc-relocate.ll
+++ b/llvm/test/Transforms/LICM/gc-relocate.ll
@@ -4,35 +4,34 @@
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"
-define i8 addrspace(1)* @test(i8 addrspace(1)* %arg) #0 gc "statepoint-example" personality i32* ()* @wobble {
+define ptr addrspace(1) @test(ptr addrspace(1) %arg) #0 gc "statepoint-example" personality ptr @wobble {
; CHECK-LABEL: @test(
; CHECK-NEXT: bb:
; CHECK-NEXT: br label [[BB1:%.*]]
; CHECK: bb1:
-; CHECK-NEXT: [[TMP:%.*]] = call token (i64, i32, i32 (i32, i8 addrspace(1)*, i32, i32, i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i32i32p1i8i32i32i32f(i64 1, i32 16, i32 (i32, i8 addrspace(1)*, i32, i32, i32)* nonnull elementtype(i32 (i32, i8 addrspace(1)*, i32, i32, i32)) @zot, i32 5, i32 0, i32 undef, i8 addrspace(1)* undef, i32 undef, i32 undef, i32 undef, i32 0, i32 0) [ "deopt"(i32 0, i32 0, i32 0, i32 235, i32 3, i32 32, i32 0, i32 0, i8 addrspace(1)* undef, i32 3, i32 undef, i32 3, float undef, i32 0, i8 addrspace(1)* undef, i32 7, i8* null, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 0, i8 addrspace(1)* undef, i32 4, double undef, i32 7, i8* null, i32 0, i8 addrspace(1)* undef, i32 3, float undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* null, i32 3, i32 -15108, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null), "gc-live"(i8 addrspace(1)* [[ARG:%.*]]) ]
+; CHECK-NEXT: [[TMP:%.*]] = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 1, i32 16, ptr nonnull elementtype(i32 (i32, ptr addrspace(1), i32, i32, i32)) @zot, i32 5, i32 0, i32 undef, ptr addrspace(1) undef, i32 undef, i32 undef, i32 undef, i32 0, i32 0) [ "deopt"(i32 0, i32 0, i32 0, i32 235, i32 3, i32 32, i32 0, i32 0, ptr addrspace(1) undef, i32 3, i32 undef, i32 3, float undef, i32 0, ptr addrspace(1) undef, i32 7, ptr null, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 0, ptr addrspace(1) undef, i32 4, double undef, i32 7, ptr null, i32 0, ptr addrspace(1) undef, i32 3, float undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) null, i32 3, i32 -15108, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null), "gc-live"(ptr addrspace(1) [[ARG:%.*]]) ]
; CHECK-NEXT: br i1 false, label [[BB1]], label [[BB2:%.*]]
; CHECK: bb2:
-; CHECK-NEXT: [[RES_LE:%.*]] = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token [[TMP]], i32 0, i32 0) #[[ATTR1:[0-9]+]]
-; CHECK-NEXT: ret i8 addrspace(1)* [[RES_LE]]
+; CHECK-NEXT: [[RES_LE:%.*]] = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[TMP]], i32 0, i32 0) #[[ATTR1:[0-9]+]]
+; CHECK-NEXT: ret ptr addrspace(1) [[RES_LE]]
;
bb:
br label %bb1
bb1:
- %tmp = call token (i64, i32, i32 (i32, i8 addrspace(1)*, i32, i32, i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i32i32p1i8i32i32i32f(i64 1, i32 16, i32 (i32, i8 addrspace(1)*, i32, i32, i32)* nonnull elementtype(i32 (i32, i8 addrspace(1)*, i32, i32, i32)) @zot, i32 5, i32 0, i32 undef, i8 addrspace(1)* undef, i32 undef, i32 undef, i32 undef, i32 0, i32 0) [ "deopt"(i32 0, i32 0, i32 0, i32 235, i32 3, i32 32, i32 0, i32 0, i8 addrspace(1)* undef, i32 3, i32 undef, i32 3, float undef, i32 0, i8 addrspace(1)* undef, i32 7, i8* null, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 0, i8 addrspace(1)* undef, i32 4, double undef, i32 7, i8* null, i32 0, i8 addrspace(1)* undef, i32 3, float undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* undef, i32 0, i8 addrspace(1)* null, i32 3, i32 -15108, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null), "gc-live"(i8 addrspace(1)* %arg) ]
- %res = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %tmp, i32 0, i32 0) readnone
+ %tmp = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 1, i32 16, ptr nonnull elementtype(i32 (i32, ptr addrspace(1), i32, i32, i32)) @zot, i32 5, i32 0, i32 undef, ptr addrspace(1) undef, i32 undef, i32 undef, i32 undef, i32 0, i32 0) [ "deopt"(i32 0, i32 0, i32 0, i32 235, i32 3, i32 32, i32 0, i32 0, ptr addrspace(1) undef, i32 3, i32 undef, i32 3, float undef, i32 0, ptr addrspace(1) undef, i32 7, ptr null, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 0, ptr addrspace(1) undef, i32 4, double undef, i32 7, ptr null, i32 0, ptr addrspace(1) undef, i32 3, float undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) null, i32 3, i32 -15108, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null), "gc-live"(ptr addrspace(1) %arg) ]
+ %res = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp, i32 0, i32 0) readnone
br i1 undef, label %bb1, label %bb2
bb2:
- ret i8 addrspace(1)* %res
+ ret ptr addrspace(1) %res
}
-declare i32* @wobble()
-declare i32 @zot(i32, i8 addrspace(1)*, i32, i32, i32)
-declare token @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64, i32, void (i32)*, i32, i32, ...)
+declare ptr @wobble()
+declare i32 @zot(i32, ptr addrspace(1), i32, i32, i32)
+declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
; Function Attrs: nounwind readnone
-declare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32, i32) #0
-declare token @llvm.experimental.gc.statepoint.p0f_i32i32p1i8i32i32i32f(i64, i32, i32 (i32, i8 addrspace(1)*, i32, i32, i32)*, i32, i32, ...)
+declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32, i32) #0
attributes #0 = { nounwind readnone }
diff --git a/llvm/test/Transforms/LICM/guards.ll b/llvm/test/Transforms/LICM/guards.ll
index 7feb1291483d3..9b717bae3e94c 100644
--- a/llvm/test/Transforms/LICM/guards.ll
+++ b/llvm/test/Transforms/LICM/guards.ll
@@ -4,11 +4,11 @@
; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' -ipt-expensive-asserts=true < %s -S | FileCheck %s
; Hoist guard and load.
-define void @test1(i1 %cond, i32* %ptr) {
+define void @test1(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test1(
; CHECK-NEXT: entry:
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[COND:%.*]]) [ "deopt"(i32 0) ]
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR:%.*]], align 4
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR:%.*]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
@@ -22,21 +22,21 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
call void (i1, ...) @llvm.experimental.guard(i1 %cond) ["deopt" (i32 0)]
- %val = load i32, i32* %ptr
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
; Can't hoist over a side effect
-define void @test2(i1 %cond, i32* %ptr) {
+define void @test2(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test2(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
-; CHECK-NEXT: store i32 0, i32* [[PTR:%.*]], align 4
+; CHECK-NEXT: store i32 0, ptr [[PTR:%.*]], align 4
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[COND:%.*]]) [ "deopt"(i32 0) ]
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR]], align 4
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR]], align 4
; CHECK-NEXT: [[X_INC]] = add i32 [[X]], [[VAL]]
; CHECK-NEXT: br label [[LOOP]]
;
@@ -46,24 +46,24 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- store i32 0, i32* %ptr
+ store i32 0, ptr %ptr
call void (i1, ...) @llvm.experimental.guard(i1 %cond) ["deopt" (i32 0)]
- %val = load i32, i32* %ptr
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
; Can't hoist over a side effect
-define void @test2b(i1 %cond, i32* %ptr) {
+define void @test2b(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test2b(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i32 1
+; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i32 1
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
-; CHECK-NEXT: store i32 [[X]], i32* [[P2]], align 4
+; CHECK-NEXT: store i32 [[X]], ptr [[P2]], align 4
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[COND:%.*]]) [ "deopt"(i32 0) ]
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR]], align 4
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR]], align 4
; CHECK-NEXT: [[X_INC]] = add i32 [[X]], [[VAL]]
; CHECK-NEXT: br label [[LOOP]]
;
@@ -73,22 +73,22 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- %p2 = getelementptr i32, i32* %ptr, i32 1
- store i32 %x, i32* %p2
+ %p2 = getelementptr i32, ptr %ptr, i32 1
+ store i32 %x, ptr %p2
call void (i1, ...) @llvm.experimental.guard(i1 %cond) ["deopt" (i32 0)]
- %val = load i32, i32* %ptr
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
; But can hoist if the side effect is hoisted with MSSA
-define void @test2b_prime(i1 %cond, i32* noalias %ptr) {
+define void @test2b_prime(i1 %cond, ptr noalias %ptr) {
; CHECK-LABEL: @test2b_prime(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i32 1
-; CHECK-NEXT: store i32 0, i32* [[P2]], align 4
+; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i32 1
+; CHECK-NEXT: store i32 0, ptr [[P2]], align 4
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[COND:%.*]]) [ "deopt"(i32 0) ]
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR]], align 4
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
@@ -101,25 +101,25 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- %p2 = getelementptr i32, i32* %ptr, i32 1
- store i32 0, i32* %p2
+ %p2 = getelementptr i32, ptr %ptr, i32 1
+ store i32 0, ptr %p2
call void (i1, ...) @llvm.experimental.guard(i1 %cond) ["deopt" (i32 0)]
- %val = load i32, i32* %ptr
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
; Hoist guard. Cannot hoist load because of aliasing, but can promote.
-define void @test3(i1 %cond, i32* %ptr) {
+define void @test3(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test3(
; CHECK-NEXT: entry:
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[COND:%.*]]) [ "deopt"(i32 0) ]
-; CHECK-NEXT: [[PTR_PROMOTED:%.*]] = load i32, i32* [[PTR:%.*]], align 4
+; CHECK-NEXT: [[PTR_PROMOTED:%.*]] = load i32, ptr [[PTR:%.*]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[TMP0:%.*]] = phi i32 [ [[PTR_PROMOTED]], [[ENTRY:%.*]] ], [ 0, [[LOOP]] ]
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[X_INC:%.*]], [[LOOP]] ]
-; CHECK-NEXT: store i32 0, i32* [[PTR]], align 4
+; CHECK-NEXT: store i32 0, ptr [[PTR]], align 4
; CHECK-NEXT: [[X_INC]] = add i32 [[X]], [[TMP0]]
; CHECK-NEXT: br label [[LOOP]]
;
@@ -130,17 +130,17 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
call void (i1, ...) @llvm.experimental.guard(i1 %cond) ["deopt" (i32 0)]
- %val = load i32, i32* %ptr
- store i32 0, i32* %ptr
+ %val = load i32, ptr %ptr
+ store i32 0, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
; Hoist load and guard.
-define void @test4(i1 %c, i32* %p) {
+define void @test4(i1 %c, ptr %p) {
; CHECK-LABEL: @test4(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[INVARIANT_COND]]) [ "deopt"() ]
; CHECK-NEXT: br label [[LOOP:%.*]]
@@ -174,7 +174,7 @@ if.false:
br label %backedge
backedge:
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
%loop_cond = icmp slt i32 %iv.next, 1000
@@ -185,7 +185,7 @@ exit:
}
; Do not hoist across a conditionally executed side effect.
-define void @test4a(i1 %c, i32* %p, i32* %q) {
+define void @test4a(i1 %c, ptr %p, ptr %q) {
; CHECK-LABEL: @test4a(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
@@ -194,12 +194,12 @@ define void @test4a(i1 %c, i32* %p, i32* %q) {
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
; CHECK: if.true:
-; CHECK-NEXT: store i32 123, i32* [[Q:%.*]], align 4
+; CHECK-NEXT: store i32 123, ptr [[Q:%.*]], align 4
; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false:
; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: backedge:
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[INVARIANT_COND]]) [ "deopt"() ]
; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp slt i32 [[IV_NEXT]], 1000
@@ -217,14 +217,14 @@ loop:
br i1 %c, label %if.true, label %if.false
if.true:
- store i32 123, i32* %q
+ store i32 123, ptr %q
br label %backedge
if.false:
br label %backedge
backedge:
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
%loop_cond = icmp slt i32 %iv.next, 1000
@@ -235,7 +235,7 @@ exit:
}
; Do not hoist a conditionally executed guard.
-define void @test4b(i1 %c, i32* %p, i32* %q) {
+define void @test4b(i1 %c, ptr %p, ptr %q) {
; CHECK-LABEL: @test4b(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
@@ -244,7 +244,7 @@ define void @test4b(i1 %c, i32* %p, i32* %q) {
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
; CHECK: if.true:
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[INVARIANT_COND]]) [ "deopt"() ]
; CHECK-NEXT: br label [[BACKEDGE]]
@@ -266,7 +266,7 @@ loop:
br i1 %c, label %if.true, label %if.false
if.true:
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
br label %backedge
@@ -283,11 +283,11 @@ exit:
}
; Hoist store, load and guard.
-define void @test4c(i1 %c, i32* %p, i8* noalias %s) {
+define void @test4c(i1 %c, ptr %p, ptr noalias %s) {
; CHECK-LABEL: @test4c(
; CHECK-NEXT: entry:
-; CHECK-NEXT: store i8 0, i8* [[S:%.*]], align 1
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: store i8 0, ptr [[S:%.*]], align 1
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[INVARIANT_COND]]) [ "deopt"() ]
; CHECK-NEXT: br label [[LOOP:%.*]]
@@ -312,7 +312,7 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
%iv.next = add i32 %iv, 1
- store i8 0, i8* %s
+ store i8 0, ptr %s
br i1 %c, label %if.true, label %if.false
if.true:
@@ -322,7 +322,7 @@ if.false:
br label %backedge
backedge:
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
%loop_cond = icmp slt i32 %iv.next, 1000
@@ -333,10 +333,10 @@ exit:
}
; Check that we don't hoist across a store in a conditionally executed block.
-define void @test4d(i1 %c, i32* %p, i8* noalias %s) {
+define void @test4d(i1 %c, ptr %p, ptr noalias %s) {
; CHECK-LABEL: @test4d(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
@@ -344,7 +344,7 @@ define void @test4d(i1 %c, i32* %p, i8* noalias %s) {
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
; CHECK: if.true:
-; CHECK-NEXT: store i8 0, i8* [[S:%.*]], align 1
+; CHECK-NEXT: store i8 0, ptr [[S:%.*]], align 1
; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false:
; CHECK-NEXT: br label [[BACKEDGE]]
@@ -365,14 +365,14 @@ loop:
br i1 %c, label %if.true, label %if.false
if.true:
- store i8 0, i8* %s
+ store i8 0, ptr %s
br label %backedge
if.false:
br label %backedge
backedge:
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
%loop_cond = icmp slt i32 %iv.next, 1000
@@ -383,12 +383,12 @@ exit:
}
; Check that we don't hoist across a store before the guard in the backedge.
-define void @test4e(i1 %c, i32* %p, i8* noalias %s) {
+define void @test4e(i1 %c, ptr %p, ptr noalias %s) {
; CHECK-LABEL: @test4e(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
-; CHECK-NEXT: store i8 0, i8* [[S:%.*]], align 1
+; CHECK-NEXT: store i8 0, ptr [[S:%.*]], align 1
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[INVARIANT_COND]]) [ "deopt"() ]
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
@@ -421,9 +421,9 @@ if.false:
br label %backedge
backedge:
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
- store i8 0, i8* %s
+ store i8 0, ptr %s
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
%loop_cond = icmp slt i32 %iv.next, 1000
br i1 %loop_cond, label %loop, label %exit
@@ -433,13 +433,13 @@ exit:
}
; Check that we can hoist the guard in spite of store which happens after.
-define void @test4f(i1 %c, i32* %p, i8* noalias %s) {
+define void @test4f(i1 %c, ptr %p, ptr noalias %s) {
; CHECK-LABEL: @test4f(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[INVARIANT_COND]]) [ "deopt"() ]
-; CHECK-NEXT: store i8 0, i8* [[S:%.*]], align 1
+; CHECK-NEXT: store i8 0, ptr [[S:%.*]], align 1
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ]
@@ -471,10 +471,10 @@ if.false:
br label %backedge
backedge:
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
- store i8 0, i8* %s
+ store i8 0, ptr %s
%loop_cond = icmp slt i32 %iv.next, 1000
br i1 %loop_cond, label %loop, label %exit
@@ -483,10 +483,10 @@ exit:
}
; Do not hoist an invariant guard across a variant guard.
-define void @test5(i1 %c, i32* %p, i32* %q) {
+define void @test5(i1 %c, ptr %p, ptr %q) {
; CHECK-LABEL: @test5(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
@@ -509,7 +509,7 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
%iv.next = add i32 %iv, 1
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
%variant_cond = icmp ne i32 %a, %iv
call void (i1, ...) @llvm.experimental.guard(i1 %variant_cond) [ "deopt"() ]
@@ -525,10 +525,10 @@ exit:
}
; Hoist an invariant guard, leave the following variant guard in the loop.
-define void @test5a(i1 %c, i32* %p, i32* %q) {
+define void @test5a(i1 %c, ptr %p, ptr %q) {
; CHECK-LABEL: @test5a(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[P:%.*]], align 4
; CHECK-NEXT: [[INVARIANT_COND:%.*]] = icmp ne i32 [[A]], 100
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[INVARIANT_COND]]) [ "deopt"() ]
; CHECK-NEXT: br label [[LOOP:%.*]]
@@ -551,7 +551,7 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
%iv.next = add i32 %iv, 1
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
%variant_cond = icmp ne i32 %a, %iv
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
diff --git a/llvm/test/Transforms/LICM/hoist-alloc.ll b/llvm/test/Transforms/LICM/hoist-alloc.ll
index cb0d18abbf746..d8c1d3e2db201 100644
--- a/llvm/test/Transforms/LICM/hoist-alloc.ll
+++ b/llvm/test/Transforms/LICM/hoist-alloc.ll
@@ -6,15 +6,14 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
declare void @unknown()
-declare void @init(i8* nocapture)
+declare void @init(ptr nocapture)
declare void @use(i8)
define i8 @test_sink_alloca() {
; CHECK-LABEL: @test_sink_alloca(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[A:%.*]] = alloca [32 x i8], align 1
-; CHECK-NEXT: [[A_RAW:%.*]] = bitcast [32 x i8]* [[A]] to i8*
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
+; CHECK-NEXT: call void @init(ptr [[A]])
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
@@ -23,21 +22,20 @@ define i8 @test_sink_alloca() {
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], 200
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
; CHECK: for.end:
-; CHECK-NEXT: [[ADDR_LE:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
-; CHECK-NEXT: [[RES_LE:%.*]] = load i8, i8* [[ADDR_LE]], align 1
+; CHECK-NEXT: [[ADDR_LE:%.*]] = getelementptr i8, ptr [[A]], i32 31
+; CHECK-NEXT: [[RES_LE:%.*]] = load i8, ptr [[ADDR_LE]], align 1
; CHECK-NEXT: ret i8 [[RES_LE]]
;
entry:
%a = alloca [32 x i8]
- %a.raw = bitcast [32 x i8]* %a to i8*
- call void @init(i8* %a.raw)
+ call void @init(ptr %a)
br label %for.body
for.body:
%iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a, i32 31
+ %res = load i8, ptr %addr
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
br i1 %exitcond, label %for.end, label %for.body
@@ -50,10 +48,9 @@ define i8 @test_hoist_alloca() {
; CHECK-LABEL: @test_hoist_alloca(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[A:%.*]] = alloca [32 x i8], align 1
-; CHECK-NEXT: [[A_RAW:%.*]] = bitcast [32 x i8]* [[A]] to i8*
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
-; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
-; CHECK-NEXT: [[RES:%.*]] = load i8, i8* [[ADDR]], align 1
+; CHECK-NEXT: call void @init(ptr [[A]])
+; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, ptr [[A]], i32 31
+; CHECK-NEXT: [[RES:%.*]] = load i8, ptr [[ADDR]], align 1
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
@@ -68,15 +65,14 @@ define i8 @test_hoist_alloca() {
;
entry:
%a = alloca [32 x i8]
- %a.raw = bitcast [32 x i8]* %a to i8*
- call void @init(i8* %a.raw)
+ call void @init(ptr %a)
br label %for.body
for.body:
%iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a, i32 31
+ %res = load i8, ptr %addr
call void @use(i8 %res)
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
@@ -89,14 +85,14 @@ for.end:
; The attributes listed here are a) inferred by -O3 from the names
; and b) required for a standalone test. We're very inconsistent about
; which decisions we drive from TLI vs assume attributes have been infered.
-declare void @free(i8* nocapture)
-declare noalias i8* @malloc(i64)
+declare void @free(ptr nocapture)
+declare noalias ptr @malloc(i64)
define i8 @test_sink_malloc() {
; CHECK-LABEL: @test_sink_malloc(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull i8* @malloc(i64 32)
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
+; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull ptr @malloc(i64 32)
+; CHECK-NEXT: call void @init(ptr [[A_RAW]])
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
@@ -105,28 +101,28 @@ define i8 @test_sink_malloc() {
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], 200
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
; CHECK: for.end:
-; CHECK-NEXT: [[ADDR_LE:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
-; CHECK-NEXT: [[RES_LE:%.*]] = load i8, i8* [[ADDR_LE]], align 1
-; CHECK-NEXT: call void @free(i8* [[A_RAW]])
+; CHECK-NEXT: [[ADDR_LE:%.*]] = getelementptr i8, ptr [[A_RAW]], i32 31
+; CHECK-NEXT: [[RES_LE:%.*]] = load i8, ptr [[ADDR_LE]], align 1
+; CHECK-NEXT: call void @free(ptr [[A_RAW]])
; CHECK-NEXT: ret i8 [[RES_LE]]
;
entry:
; Mark as nonnull to simplify test
- %a.raw = call nonnull i8* @malloc(i64 32)
- call void @init(i8* %a.raw)
+ %a.raw = call nonnull ptr @malloc(i64 32)
+ call void @init(ptr %a.raw)
br label %for.body
for.body:
%iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a.raw, i32 31
+ %res = load i8, ptr %addr
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
br i1 %exitcond, label %for.end, label %for.body
for.end:
- call void @free(i8* %a.raw)
+ call void @free(ptr %a.raw)
ret i8 %res
}
@@ -135,54 +131,54 @@ for.end:
define i8 @test_hoist_malloc() {
; CHECK-LABEL: @test_hoist_malloc(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull i8* @malloc(i64 32)
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
-; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
+; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull ptr @malloc(i64 32)
+; CHECK-NEXT: call void @init(ptr [[A_RAW]])
+; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, ptr [[A_RAW]], i32 31
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: call void @unknown()
-; CHECK-NEXT: [[RES:%.*]] = load i8, i8* [[ADDR]], align 1
+; CHECK-NEXT: [[RES:%.*]] = load i8, ptr [[ADDR]], align 1
; CHECK-NEXT: call void @use(i8 [[RES]])
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], 200
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
; CHECK: for.end:
; CHECK-NEXT: [[RES_LCSSA:%.*]] = phi i8 [ [[RES]], [[FOR_BODY]] ]
-; CHECK-NEXT: call void @free(i8* [[A_RAW]])
+; CHECK-NEXT: call void @free(ptr [[A_RAW]])
; CHECK-NEXT: ret i8 [[RES_LCSSA]]
;
entry:
- %a.raw = call nonnull i8* @malloc(i64 32)
- call void @init(i8* %a.raw)
+ %a.raw = call nonnull ptr @malloc(i64 32)
+ call void @init(ptr %a.raw)
br label %for.body
for.body:
%iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a.raw, i32 31
+ %res = load i8, ptr %addr
call void @use(i8 %res)
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
br i1 %exitcond, label %for.end, label %for.body
for.end:
- call void @free(i8* %a.raw)
+ call void @free(ptr %a.raw)
ret i8 %res
}
define i8 @test_hoist_malloc_leak() nofree nosync {
; CHECK-LABEL: @test_hoist_malloc_leak(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull i8* @malloc(i64 32)
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
-; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
+; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull ptr @malloc(i64 32)
+; CHECK-NEXT: call void @init(ptr [[A_RAW]])
+; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, ptr [[A_RAW]], i32 31
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: call void @unknown()
-; CHECK-NEXT: [[RES:%.*]] = load i8, i8* [[ADDR]], align 1
+; CHECK-NEXT: [[RES:%.*]] = load i8, ptr [[ADDR]], align 1
; CHECK-NEXT: call void @use(i8 [[RES]])
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], 200
@@ -192,15 +188,15 @@ define i8 @test_hoist_malloc_leak() nofree nosync {
; CHECK-NEXT: ret i8 [[RES_LCSSA]]
;
entry:
- %a.raw = call nonnull i8* @malloc(i64 32)
- call void @init(i8* %a.raw)
+ %a.raw = call nonnull ptr @malloc(i64 32)
+ call void @init(ptr %a.raw)
br label %for.body
for.body:
%iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a.raw, i32 31
+ %res = load i8, ptr %addr
call void @use(i8 %res)
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
@@ -216,21 +212,21 @@ for.end:
define void @test_hoist_malloc_cond_free(i1 %c) {
; CHECK-LABEL: @test_hoist_malloc_cond_free(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull i8* @malloc(i64 32)
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
+; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull ptr @malloc(i64 32)
+; CHECK-NEXT: call void @init(ptr [[A_RAW]])
; CHECK-NEXT: br i1 [[C:%.*]], label [[COND_FREE:%.*]], label [[PREHEADER:%.*]]
; CHECK: cond.free:
-; CHECK-NEXT: call void @free(i8* [[A_RAW]])
+; CHECK-NEXT: call void @free(ptr [[A_RAW]])
; CHECK-NEXT: br label [[PREHEADER]]
; CHECK: preheader:
-; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
+; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, ptr [[A_RAW]], i32 31
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ], [ 0, [[PREHEADER]] ]
; CHECK-NEXT: br i1 [[C]], label [[FOR_END:%.*]], label [[LOOP_LATCH]]
; CHECK: loop.latch:
; CHECK-NEXT: call void @unknown()
-; CHECK-NEXT: [[RES:%.*]] = load i8, i8* [[ADDR]], align 1
+; CHECK-NEXT: [[RES:%.*]] = load i8, ptr [[ADDR]], align 1
; CHECK-NEXT: call void @use(i8 [[RES]])
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], 200
@@ -239,11 +235,11 @@ define void @test_hoist_malloc_cond_free(i1 %c) {
; CHECK-NEXT: ret void
;
entry:
- %a.raw = call nonnull i8* @malloc(i64 32)
- call void @init(i8* %a.raw)
+ %a.raw = call nonnull ptr @malloc(i64 32)
+ call void @init(ptr %a.raw)
br i1 %c, label %cond.free, label %preheader
cond.free:
- call void @free(i8* %a.raw)
+ call void @free(ptr %a.raw)
br label %preheader
preheader:
br label %for.body
@@ -254,8 +250,8 @@ for.body:
loop.latch:
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a.raw, i32 31
+ %res = load i8, ptr %addr
call void @use(i8 %res)
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
@@ -268,11 +264,11 @@ for.end:
define i8 @test_sink_malloc_cond_free(i1 %c) {
; CHECK-LABEL: @test_sink_malloc_cond_free(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull i8* @malloc(i64 32)
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
+; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull ptr @malloc(i64 32)
+; CHECK-NEXT: call void @init(ptr [[A_RAW]])
; CHECK-NEXT: br i1 [[C:%.*]], label [[COND_FREE:%.*]], label [[PREHEADER:%.*]]
; CHECK: cond.free:
-; CHECK-NEXT: call void @free(i8* [[A_RAW]])
+; CHECK-NEXT: call void @free(ptr [[A_RAW]])
; CHECK-NEXT: br label [[PREHEADER]]
; CHECK: preheader:
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
@@ -285,8 +281,8 @@ define i8 @test_sink_malloc_cond_free(i1 %c) {
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], 200
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END_SPLIT_LOOP_EXIT:%.*]], label [[FOR_BODY]]
; CHECK: for.end.split.loop.exit:
-; CHECK-NEXT: [[ADDR_LE:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
-; CHECK-NEXT: [[RES_LE:%.*]] = load i8, i8* [[ADDR_LE]], align 1
+; CHECK-NEXT: [[ADDR_LE:%.*]] = getelementptr i8, ptr [[A_RAW]], i32 31
+; CHECK-NEXT: [[RES_LE:%.*]] = load i8, ptr [[ADDR_LE]], align 1
; CHECK-NEXT: br label [[FOR_END:%.*]]
; CHECK: for.end.split.loop.exit1:
; CHECK-NEXT: [[PHI_PH2:%.*]] = phi i8 [ 0, [[FOR_BODY]] ]
@@ -296,11 +292,11 @@ define i8 @test_sink_malloc_cond_free(i1 %c) {
; CHECK-NEXT: ret i8 [[PHI]]
;
entry:
- %a.raw = call nonnull i8* @malloc(i64 32)
- call void @init(i8* %a.raw)
+ %a.raw = call nonnull ptr @malloc(i64 32)
+ call void @init(ptr %a.raw)
br i1 %c, label %cond.free, label %preheader
cond.free:
- call void @free(i8* %a.raw)
+ call void @free(ptr %a.raw)
br label %preheader
preheader:
br label %for.body
@@ -311,8 +307,8 @@ for.body:
loop.latch:
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a.raw, i32 31
+ %res = load i8, ptr %addr
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
br i1 %exitcond, label %for.end, label %for.body
@@ -322,61 +318,61 @@ for.end:
ret i8 %phi
}
-declare noalias i8* @my_alloc(i64) allocsize(0)
+declare noalias ptr @my_alloc(i64) allocsize(0)
; We would need context sensitive reasoning about frees (which we don't
; don't currently have) to hoist the load in this example.
define i8 @test_hoist_allocsize() {
; CHECK-LABEL: @test_hoist_allocsize(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull i8* @my_alloc(i64 32)
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
-; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
+; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull ptr @my_alloc(i64 32)
+; CHECK-NEXT: call void @init(ptr [[A_RAW]])
+; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, ptr [[A_RAW]], i32 31
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: call void @unknown()
-; CHECK-NEXT: [[RES:%.*]] = load i8, i8* [[ADDR]], align 1
+; CHECK-NEXT: [[RES:%.*]] = load i8, ptr [[ADDR]], align 1
; CHECK-NEXT: call void @use(i8 [[RES]])
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], 200
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
; CHECK: for.end:
; CHECK-NEXT: [[RES_LCSSA:%.*]] = phi i8 [ [[RES]], [[FOR_BODY]] ]
-; CHECK-NEXT: call void @free(i8* [[A_RAW]])
+; CHECK-NEXT: call void @free(ptr [[A_RAW]])
; CHECK-NEXT: ret i8 [[RES_LCSSA]]
;
entry:
- %a.raw = call nonnull i8* @my_alloc(i64 32)
- call void @init(i8* %a.raw)
+ %a.raw = call nonnull ptr @my_alloc(i64 32)
+ call void @init(ptr %a.raw)
br label %for.body
for.body:
%iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a.raw, i32 31
+ %res = load i8, ptr %addr
call void @use(i8 %res)
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
br i1 %exitcond, label %for.end, label %for.body
for.end:
- call void @free(i8* %a.raw)
+ call void @free(ptr %a.raw)
ret i8 %res
}
define i8 @test_hoist_allocsize_leak() nofree nosync {
; CHECK-LABEL: @test_hoist_allocsize_leak(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull i8* @my_alloc(i64 32)
-; CHECK-NEXT: call void @init(i8* [[A_RAW]])
-; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, i8* [[A_RAW]], i32 31
+; CHECK-NEXT: [[A_RAW:%.*]] = call nonnull ptr @my_alloc(i64 32)
+; CHECK-NEXT: call void @init(ptr [[A_RAW]])
+; CHECK-NEXT: [[ADDR:%.*]] = getelementptr i8, ptr [[A_RAW]], i32 31
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: call void @unknown()
-; CHECK-NEXT: [[RES:%.*]] = load i8, i8* [[ADDR]], align 1
+; CHECK-NEXT: [[RES:%.*]] = load i8, ptr [[ADDR]], align 1
; CHECK-NEXT: call void @use(i8 [[RES]])
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], 200
@@ -386,15 +382,15 @@ define i8 @test_hoist_allocsize_leak() nofree nosync {
; CHECK-NEXT: ret i8 [[RES_LCSSA]]
;
entry:
- %a.raw = call nonnull i8* @my_alloc(i64 32)
- call void @init(i8* %a.raw)
+ %a.raw = call nonnull ptr @my_alloc(i64 32)
+ call void @init(ptr %a.raw)
br label %for.body
for.body:
%iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
call void @unknown() ;; may throw
- %addr = getelementptr i8, i8* %a.raw, i32 31
- %res = load i8, i8* %addr
+ %addr = getelementptr i8, ptr %a.raw, i32 31
+ %res = load i8, ptr %addr
call void @use(i8 %res)
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, 200
diff --git a/llvm/test/Transforms/LICM/hoist-bitcast-load.ll b/llvm/test/Transforms/LICM/hoist-bitcast-load.ll
index 8181b90b2fa61..b347b0425e88c 100644
--- a/llvm/test/Transforms/LICM/hoist-bitcast-load.ll
+++ b/llvm/test/Transforms/LICM/hoist-bitcast-load.ll
@@ -6,11 +6,11 @@ target triple = "x86_64-unknown-linux-gnu"
; Make sure the basic alloca pointer hoisting works:
; CHECK-LABEL: @test1
-; CHECK: load i32, i32* %c, align 4
+; CHECK: load i32, ptr %c, align 4
; CHECK: for.body:
; Function Attrs: nounwind uwtable
-define void @test1(i32* nocapture %a, i32* nocapture readonly %b, i32 %n) #0 {
+define void @test1(ptr nocapture %a, ptr nocapture readonly %b, i32 %n) #0 {
entry:
%cmp6 = icmp sgt i32 %n, 0
%c = alloca i32
@@ -18,17 +18,17 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -44,30 +44,29 @@ for.end: ; preds = %for.inc, %entry
; Make sure the basic alloca pointer hoisting works through a bitcast to a
; pointer to a smaller type:
; CHECK-LABEL: @test2
-; CHECK: load i32, i32* %c, align 4
+; CHECK: load i32, ptr %ca, align 4
; CHECK: for.body:
; Function Attrs: nounwind uwtable
-define void @test2(i32* nocapture %a, i32* nocapture readonly %b, i32 %n) #0 {
+define void @test2(ptr nocapture %a, ptr nocapture readonly %b, i32 %n) #0 {
entry:
%cmp6 = icmp sgt i32 %n, 0
%ca = alloca i64
- %c = bitcast i64* %ca to i32*
br i1 %cmp6, label %for.body, label %for.end
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %ca, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -82,30 +81,30 @@ for.end: ; preds = %for.inc, %entry
; Make sure the basic alloca pointer hoisting works through an addrspacecast
; CHECK-LABEL: @test2_addrspacecast
-; CHECK: load i32, i32 addrspace(1)* %c, align 4
+; CHECK: load i32, ptr addrspace(1) %c, align 4
; CHECK: for.body:
; Function Attrs: nounwind uwtable
-define void @test2_addrspacecast(i32 addrspace(1)* nocapture %a, i32 addrspace(1)* nocapture readonly %b, i32 %n) #0 {
+define void @test2_addrspacecast(ptr addrspace(1) nocapture %a, ptr addrspace(1) nocapture readonly %b, i32 %n) #0 {
entry:
%cmp6 = icmp sgt i32 %n, 0
%ca = alloca i64
- %c = addrspacecast i64* %ca to i32 addrspace(1)*
+ %c = addrspacecast ptr %ca to ptr addrspace(1)
br i1 %cmp6, label %for.body, label %for.end
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %a, i64 %indvars.iv
- %0 = load i32, i32 addrspace(1)* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr addrspace(1) %a, i64 %indvars.iv
+ %0 = load i32, ptr addrspace(1) %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32 addrspace(1)* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32 addrspace(1)* %b, i64 %indvars.iv
- %2 = load i32, i32 addrspace(1)* %arrayidx3, align 4
+ %1 = load i32, ptr addrspace(1) %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr addrspace(1) %b, i64 %indvars.iv
+ %2 = load i32, ptr addrspace(1) %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32 addrspace(1)* %arrayidx, align 4
+ store i32 %mul, ptr addrspace(1) %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -121,11 +120,11 @@ for.end: ; preds = %for.inc, %entry
; Make sure the basic alloca pointer hoisting works through a bitcast to a
; pointer to a smaller type (where the bitcast also needs to be hoisted):
; CHECK-LABEL: @test3
-; CHECK: load i32, i32* %c, align 4
+; CHECK: load i32, ptr %ca, align 4
; CHECK: for.body:
; Function Attrs: nounwind uwtable
-define void @test3(i32* nocapture %a, i32* nocapture readonly %b, i32 %n) #0 {
+define void @test3(ptr nocapture %a, ptr nocapture readonly %b, i32 %n) #0 {
entry:
%cmp6 = icmp sgt i32 %n, 0
%ca = alloca i64
@@ -133,18 +132,17 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %c = bitcast i64* %ca to i32*
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %ca, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -161,29 +159,28 @@ for.end: ; preds = %for.inc, %entry
; to a pointer to a larger type:
; CHECK-LABEL: @test4
; CHECK: for.body:
-; CHECK: load i32, i32* %c, align 4
+; CHECK: load i32, ptr %ca, align 4
; Function Attrs: nounwind uwtable
-define void @test4(i32* nocapture %a, i32* nocapture readonly %b, i32 %n) #0 {
+define void @test4(ptr nocapture %a, ptr nocapture readonly %b, i32 %n) #0 {
entry:
%cmp6 = icmp sgt i32 %n, 0
%ca = alloca i16
- %c = bitcast i16* %ca to i32*
br i1 %cmp6, label %for.body, label %for.end
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %ca, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -199,32 +196,30 @@ for.end: ; preds = %for.inc, %entry
; Don't crash on bitcasts to unsized types.
; CHECK-LABEL: @test5
; CHECK: for.body:
-; CHECK: load i32, i32* %c, align 4
+; CHECK: load i32, ptr %ca, align 4
%atype = type opaque
; Function Attrs: nounwind uwtable
-define void @test5(i32* nocapture %a, i32* nocapture readonly %b, i32 %n) #0 {
+define void @test5(ptr nocapture %a, ptr nocapture readonly %b, i32 %n) #0 {
entry:
%cmp6 = icmp sgt i32 %n, 0
%ca = alloca i16
- %cab = bitcast i16* %ca to %atype*
- %c = bitcast %atype* %cab to i32*
br i1 %cmp6, label %for.body, label %for.end
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %ca, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
diff --git a/llvm/test/Transforms/LICM/hoist-debuginvariant.ll b/llvm/test/Transforms/LICM/hoist-debuginvariant.ll
index 0bfaf232a3e9b..92bd578ab9e15 100644
--- a/llvm/test/Transforms/LICM/hoist-debuginvariant.ll
+++ b/llvm/test/Transforms/LICM/hoist-debuginvariant.ll
@@ -13,20 +13,20 @@ target triple = "x86_64-unknown-linux-gnu"
define void @fn1() !dbg !6 {
; CHECK-LABEL: @fn1(
-; CHECK-NEXT: [[_TMP2:%.*]] = load i32, i32* @a, align 4
-; CHECK-NEXT: [[_TMP3:%.*]] = load i32, i32* @b, align 4
+; CHECK-NEXT: [[_TMP2:%.*]] = load i32, ptr @a, align 4
+; CHECK-NEXT: [[_TMP3:%.*]] = load i32, ptr @b, align 4
; CHECK-NEXT: [[_TMP4:%.*]] = sdiv i32 [[_TMP2]], [[_TMP3]]
; CHECK-NEXT: br label [[BB3:%.*]]
br label %bb3
bb3: ; preds = %bb3, %0
- call void @llvm.dbg.value(metadata i32* @c, metadata !10, metadata !DIExpression(DW_OP_deref)), !dbg !12
- %_tmp2 = load i32, i32* @a, align 4
- %_tmp3 = load i32, i32* @b, align 4
+ call void @llvm.dbg.value(metadata ptr @c, metadata !10, metadata !DIExpression(DW_OP_deref)), !dbg !12
+ %_tmp2 = load i32, ptr @a, align 4
+ %_tmp3 = load i32, ptr @b, align 4
%_tmp4 = sdiv i32 %_tmp2, %_tmp3
- store i32 %_tmp4, i32* @c, align 4
- %_tmp6 = load volatile i32, i32* @c, align 4
+ store i32 %_tmp4, ptr @c, align 4
+ %_tmp6 = load volatile i32, ptr @c, align 4
br label %bb3
}
diff --git a/llvm/test/Transforms/LICM/hoist-deref-load.ll b/llvm/test/Transforms/LICM/hoist-deref-load.ll
index 1887b80db0bd7..4a4d5419a9d81 100644
--- a/llvm/test/Transforms/LICM/hoist-deref-load.ll
+++ b/llvm/test/Transforms/LICM/hoist-deref-load.ll
@@ -14,25 +14,25 @@ target triple = "x86_64-unknown-linux-gnu"
; and we want to hoist the load of %c out of the loop. This can be done only
; because the dereferenceable attribute is on %c.
-define void @test1(i32* noalias nocapture %a, i32* noalias nocapture readonly %b, i32* nocapture readonly nonnull dereferenceable(4) align 4 %c, i32 %n) #0 {
+define void @test1(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, ptr nocapture readonly nonnull dereferenceable(4) align 4 %c, i32 %n) #0 {
; CHECK-LABEL: @test1(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[C:%.*]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[C:%.*]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP1]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP0]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -50,17 +50,17 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -75,7 +75,7 @@ for.end: ; preds = %for.inc, %entry
; This is the same as @test1, but without the dereferenceable attribute on %c.
; Without this attribute, we should not hoist the load of %c.
-define void @test2(i32* noalias nocapture %a, i32* noalias nocapture readonly %b, i32* nocapture readonly nonnull %c, i32 %n) #0 {
+define void @test2(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, ptr nocapture readonly nonnull %c, i32 %n) #0 {
; CHECK-LABEL: @test2(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
@@ -84,16 +84,16 @@ define void @test2(i32* noalias nocapture %a, i32* noalias nocapture readonly %b
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[C:%.*]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[C:%.*]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP1]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -111,17 +111,17 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -138,30 +138,30 @@ for.end: ; preds = %for.inc, %entry
; void test3(int * restrict a, int * restrict b, int c[static 3], int n) {
; for (int i = 0; i < n; ++i)
; if (a[i] > 0)
-; a[i] = c[2]*b[i];
+; a[i] = cptr b[i];
; }
; and we want to hoist the load of c[2] out of the loop. This can be done only
; because the dereferenceable attribute is on %c.
-define void @test3(i32* noalias nocapture %a, i32* noalias nocapture readonly %b, i32* nocapture readonly dereferenceable(12) align 4 %c, i32 %n) #0 {
+define void @test3(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, ptr nocapture readonly dereferenceable(12) align 4 %c, i32 %n) #0 {
; CHECK-LABEL: @test3(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[C2:%.*]] = getelementptr inbounds i32, i32* [[C:%.*]], i64 2
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[C2]], align 4
+; CHECK-NEXT: [[C2:%.*]] = getelementptr inbounds i32, ptr [[C:%.*]], i64 2
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[C2]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP1]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP0]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -179,18 +179,18 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %c2 = getelementptr inbounds i32, i32* %c, i64 2
- %1 = load i32, i32* %c2, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %c2 = getelementptr inbounds i32, ptr %c, i64 2
+ %1 = load i32, ptr %c2, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -205,26 +205,26 @@ for.end: ; preds = %for.inc, %entry
; This is the same as @test3, but with a dereferenceable attribute on %c with a
; size too small to cover c[2] (and so we should not hoist it).
-define void @test4(i32* noalias nocapture %a, i32* noalias nocapture readonly %b, i32* nocapture readonly dereferenceable(11) %c, i32 %n) #0 {
+define void @test4(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, ptr nocapture readonly dereferenceable(11) %c, i32 %n) #0 {
; CHECK-LABEL: @test4(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[C2:%.*]] = getelementptr inbounds i32, i32* [[C:%.*]], i64 2
+; CHECK-NEXT: [[C2:%.*]] = getelementptr inbounds i32, ptr [[C:%.*]], i64 2
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[C2]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[C2]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP1]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -242,18 +242,18 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %c2 = getelementptr inbounds i32, i32* %c, i64 2
- %1 = load i32, i32* %c2, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %c2 = getelementptr inbounds i32, ptr %c, i64 2
+ %1 = load i32, ptr %c2, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -276,28 +276,28 @@ for.end: ; preds = %for.inc, %entry
; and we want to hoist the load of %c out of the loop. This can be done only
; because the dereferenceable_or_null attribute is on %c and there is a null
; check on %c.
-define void @test5(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) align 4 %c, i32 %n) #0 {
+define void @test5(ptr noalias %a, ptr %b, ptr dereferenceable_or_null(4) align 4 %c, i32 %n) #0 {
; CHECK-LABEL: @test5(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne i32* [[C:%.*]], null
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne ptr [[C:%.*]], null
; CHECK-NEXT: br i1 [[NOT_NULL]], label [[NOT_NULL:%.*]], label [[FOR_END:%.*]]
; CHECK: not.null:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[C]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[C]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP1]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP0]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -310,7 +310,7 @@ define void @test5(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) ali
; CHECK-NEXT: ret void
;
entry:
- %not_null = icmp ne i32* %c, null
+ %not_null = icmp ne ptr %c, null
br i1 %not_null, label %not.null, label %for.end
not.null:
@@ -319,17 +319,17 @@ not.null:
for.body: ; preds = %not.null, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %not.null ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -347,26 +347,26 @@ for.end: ; preds = %for.inc, %entry, %n
; This test case has an icmp on c but the use of this comparison is
; not a branch.
-define i1 @test6(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c, i32 %n) #0 {
+define i1 @test6(ptr noalias %a, ptr %b, ptr dereferenceable_or_null(4) %c, i32 %n) #0 {
; CHECK-LABEL: @test6(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne i32* [[C:%.*]], null
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne ptr [[C:%.*]], null
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[C]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[C]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP1]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -379,23 +379,23 @@ define i1 @test6(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c, i
; CHECK-NEXT: ret i1 [[NOT_NULL]]
;
entry:
- %not_null = icmp ne i32* %c, null
+ %not_null = icmp ne ptr %c, null
%cmp11 = icmp sgt i32 %n, 0
br i1 %cmp11, label %for.body, label %for.end
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -417,26 +417,26 @@ for.end: ; preds = %for.inc, %entry
; }
; and we want to hoist the load of %c out of the loop. This can be done only
; because the dereferenceable meatdata on the c = *cptr load.
-define void @test7(i32* noalias %a, i32* %b, i32** %cptr, i32 %n) #0 {
+define void @test7(ptr noalias %a, ptr %b, ptr %cptr, i32 %n) #0 {
; CHECK-LABEL: @test7(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[C:%.*]] = load i32*, i32** [[CPTR:%.*]], align 8, !dereferenceable !0, !align !0
+; CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[CPTR:%.*]], align 8, !dereferenceable !0, !align !0
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[C]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[C]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP1]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP0]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -449,23 +449,23 @@ define void @test7(i32* noalias %a, i32* %b, i32** %cptr, i32 %n) #0 {
; CHECK-NEXT: ret void
;
entry:
- %c = load i32*, i32** %cptr, !dereferenceable !0, !align !{i64 4}
+ %c = load ptr, ptr %cptr, !dereferenceable !0, !align !{i64 4}
%cmp11 = icmp sgt i32 %n, 0
br i1 %cmp11, label %for.body, label %for.end
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -489,29 +489,29 @@ for.end: ; preds = %for.inc, %entry
; and we want to hoist the load of %c out of the loop. This can be done only
; because the dereferenceable_or_null meatdata on the c = *cptr load and there
; is a null check on %c.
-define void @test8(i32* noalias %a, i32* %b, i32** %cptr, i32 %n) #0 {
+define void @test8(ptr noalias %a, ptr %b, ptr %cptr, i32 %n) #0 {
; CHECK-LABEL: @test8(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[C:%.*]] = load i32*, i32** [[CPTR:%.*]], align 8, !dereferenceable_or_null !0, !align !0
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne i32* [[C]], null
+; CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[CPTR:%.*]], align 8, !dereferenceable_or_null !0, !align !0
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne ptr [[C]], null
; CHECK-NEXT: br i1 [[NOT_NULL]], label [[NOT_NULL:%.*]], label [[FOR_END:%.*]]
; CHECK: not.null:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[C]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[C]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP1]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP0]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -524,8 +524,8 @@ define void @test8(i32* noalias %a, i32* %b, i32** %cptr, i32 %n) #0 {
; CHECK-NEXT: ret void
;
entry:
- %c = load i32*, i32** %cptr, !dereferenceable_or_null !0, !align !{i64 4}
- %not_null = icmp ne i32* %c, null
+ %c = load ptr, ptr %cptr, !dereferenceable_or_null !0, !align !{i64 4}
+ %not_null = icmp ne ptr %c, null
br i1 %not_null, label %not.null, label %for.end
not.null:
@@ -534,17 +534,17 @@ not.null:
for.body: ; preds = %not.null, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %not.null ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -559,26 +559,26 @@ for.end: ; preds = %for.inc, %entry, %n
; This is the same as @test8, but without the null check on %c.
; Without this check, we should not hoist the load of %c.
-define void @test9(i32* noalias %a, i32* %b, i32** %cptr, i32 %n) #0 {
+define void @test9(ptr noalias %a, ptr %b, ptr %cptr, i32 %n) #0 {
; CHECK-LABEL: @test9(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[C:%.*]] = load i32*, i32** [[CPTR:%.*]], align 8, !dereferenceable_or_null !0
+; CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[CPTR:%.*]], align 8, !dereferenceable_or_null !0
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[C]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[C]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP1]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -591,23 +591,23 @@ define void @test9(i32* noalias %a, i32* %b, i32** %cptr, i32 %n) #0 {
; CHECK-NEXT: ret void
;
entry:
- %c = load i32*, i32** %cptr, !dereferenceable_or_null !0
+ %c = load ptr, ptr %cptr, !dereferenceable_or_null !0
%cmp11 = icmp sgt i32 %n, 0
br i1 %cmp11, label %for.body, label %for.end
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -626,26 +626,26 @@ for.end: ; preds = %for.inc, %entry
; on the dereferenceability anymore.
; In other words this test checks that we strip dereferenceability metadata
; after hoisting an instruction.
-define void @test10(i32* noalias %a, i32* %b, i32** dereferenceable(8) align 8 %cptr, i32 %n) #0 {
+define void @test10(ptr noalias %a, ptr %b, ptr dereferenceable(8) align 8 %cptr, i32 %n) #0 {
; CHECK-LABEL: @test10(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[C:%.*]] = load i32*, i32** [[CPTR:%.*]], align 8
+; CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[CPTR:%.*]], align 8
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[C]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[C]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP1]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -663,18 +663,18 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %c = load i32*, i32** %cptr, !dereferenceable !0
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %c = load ptr, ptr %cptr, !dereferenceable !0
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -687,26 +687,26 @@ for.end: ; preds = %for.inc, %entry
ret void
}
-define void @test11(i32* noalias %a, i32* %b, i32** dereferenceable(8) %cptr, i32 %n) #0 {
+define void @test11(ptr noalias %a, ptr %b, ptr dereferenceable(8) %cptr, i32 %n) #0 {
; CHECK-LABEL: @test11(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[C:%.*]] = load i32*, i32** [[CPTR:%.*]], align 8, !dereferenceable !0
+; CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[CPTR:%.*]], align 8, !dereferenceable !0
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[D:%.*]] = load i32, i32* [[C]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[E:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[D:%.*]] = load i32, ptr [[C]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[E:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[E]], [[D]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -726,18 +726,18 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
- %c = load i32*, i32** %cptr, !dereferenceable !0
+ %c = load ptr, ptr %cptr, !dereferenceable !0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %d = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %e = load i32, i32* %arrayidx3, align 4
+ %d = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %e = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %e, %d
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -753,27 +753,27 @@ for.end: ; preds = %for.inc, %entry
declare void @llvm.experimental.guard(i1, ...)
; Prove non-null ness of %c via a guard, not a branch.
-define void @test12(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) align 4 %c, i32 %n) #0 {
+define void @test12(ptr noalias %a, ptr %b, ptr dereferenceable_or_null(4) align 4 %c, i32 %n) #0 {
; CHECK-LABEL: @test12(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne i32* [[C:%.*]], null
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne ptr [[C:%.*]], null
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[NOT_NULL]]) [ "deopt"() ]
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[C]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[C]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP1]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP0]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -786,7 +786,7 @@ define void @test12(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) al
; CHECK-NEXT: ret void
;
entry:
- %not_null = icmp ne i32* %c, null
+ %not_null = icmp ne ptr %c, null
call void(i1, ...) @llvm.experimental.guard(i1 %not_null) [ "deopt"() ]
%cmp11 = icmp sgt i32 %n, 0
br i1 %cmp11, label %for.body, label %for.end
@@ -795,17 +795,17 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -820,26 +820,26 @@ for.end: ; preds = %for.inc, %entry, %e
; Like @test12, but has a post-dominating guard, which cannot be used
; to prove %c is nonnull at the point of the load.
-define void @test13(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c, i32 %n) #0 {
+define void @test13(ptr noalias %a, ptr %b, ptr dereferenceable_or_null(4) %c, i32 %n) #0 {
; CHECK-LABEL: @test13(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne i32* [[C:%.*]], null
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne ptr [[C:%.*]], null
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[C]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[C]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP1]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -853,24 +853,24 @@ define void @test13(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c
; CHECK-NEXT: ret void
;
entry:
- %not_null = icmp ne i32* %c, null
+ %not_null = icmp ne ptr %c, null
%cmp11 = icmp sgt i32 %n, 0
br i1 %cmp11, label %for.body, label %for.end
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -886,29 +886,29 @@ for.end: ; preds = %for.inc, %entry, %e
; Check that branch by condition "null check AND something" allows to hoist the
; load.
-define void @test14(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) align 4 %c, i32 %n, i1 %dummy_cond) #0 {
+define void @test14(ptr noalias %a, ptr %b, ptr dereferenceable_or_null(4) align 4 %c, i32 %n, i1 %dummy_cond) #0 {
; CHECK-LABEL: @test14(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne i32* [[C:%.*]], null
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne ptr [[C:%.*]], null
; CHECK-NEXT: [[DUMMY_AND:%.*]] = and i1 [[NOT_NULL]], [[DUMMY_COND:%.*]]
; CHECK-NEXT: br i1 [[DUMMY_AND]], label [[NOT_NULL:%.*]], label [[FOR_END:%.*]]
; CHECK: not.null:
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[C]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[C]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP1]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP0]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -922,7 +922,7 @@ define void @test14(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) al
;
entry:
- %not_null = icmp ne i32* %c, null
+ %not_null = icmp ne ptr %c, null
%dummy_and = and i1 %not_null, %dummy_cond
br i1 %dummy_and, label %not.null, label %for.end
@@ -932,17 +932,17 @@ not.null:
for.body: ; preds = %not.null, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %not.null ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -957,28 +957,28 @@ for.end: ; preds = %for.inc, %entry, %n
; Check that guard by condition "null check AND something" allows to hoist the
; load.
-define void @test15(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) align 4 %c, i32 %n, i1 %dummy_cond) #0 {
+define void @test15(ptr noalias %a, ptr %b, ptr dereferenceable_or_null(4) align 4 %c, i32 %n, i1 %dummy_cond) #0 {
; CHECK-LABEL: @test15(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne i32* [[C:%.*]], null
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp ne ptr [[C:%.*]], null
; CHECK-NEXT: [[DUMMY_AND:%.*]] = and i1 [[NOT_NULL]], [[DUMMY_COND:%.*]]
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[DUMMY_AND]]) [ "deopt"() ]
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
; CHECK-NEXT: br i1 [[CMP11]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.preheader:
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[C]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[C]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP1]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP0]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -992,7 +992,7 @@ define void @test15(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) al
;
entry:
- %not_null = icmp ne i32* %c, null
+ %not_null = icmp ne ptr %c, null
%dummy_and = and i1 %not_null, %dummy_cond
call void(i1, ...) @llvm.experimental.guard(i1 %dummy_and) [ "deopt"() ]
%cmp11 = icmp sgt i32 %n, 0
@@ -1000,17 +1000,17 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -1026,10 +1026,10 @@ for.end: ; preds = %for.inc, %entry
; Ensure that (c == null && other_cond) does not automatically mean that c is
; non-null in false branch. So the condition ((c == null && other_cond) == false)
; is not sufficient to conclude that c != null.
-define void @test16(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c, i32 %n, i1 %dummy_cond) #0 {
+define void @test16(ptr noalias %a, ptr %b, ptr dereferenceable_or_null(4) %c, i32 %n, i1 %dummy_cond) #0 {
; CHECK-LABEL: @test16(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp eq i32* [[C:%.*]], null
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp eq ptr [[C:%.*]], null
; CHECK-NEXT: [[DUMMY_AND:%.*]] = and i1 [[NOT_NULL]], [[DUMMY_COND:%.*]]
; CHECK-NEXT: br i1 [[DUMMY_AND]], label [[FOR_END:%.*]], label [[NOT_NULL:%.*]]
; CHECK: not.null:
@@ -1039,16 +1039,16 @@ define void @test16(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[C]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[C]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP1]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -1062,7 +1062,7 @@ define void @test16(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c
;
entry:
- %not_null = icmp eq i32* %c, null
+ %not_null = icmp eq ptr %c, null
%dummy_and = and i1 %not_null, %dummy_cond
br i1 %dummy_and, label %for.end, label %not.null
@@ -1072,17 +1072,17 @@ not.null:
for.body: ; preds = %not.null, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %not.null ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
@@ -1098,10 +1098,10 @@ for.end: ; preds = %for.inc, %entry, %n
; Ensure that (c == null && other_cond) does not automatically mean that c is
; non-null in false branch. So the condition ((c == null && other_cond) == false)
; is not sufficient to conclude that c != null.
-define void @test17(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c, i32 %n, i1 %dummy_cond) #0 {
+define void @test17(ptr noalias %a, ptr %b, ptr dereferenceable_or_null(4) %c, i32 %n, i1 %dummy_cond) #0 {
; CHECK-LABEL: @test17(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp eq i32* [[C:%.*]], null
+; CHECK-NEXT: [[NOT_NULL:%.*]] = icmp eq ptr [[C:%.*]], null
; CHECK-NEXT: [[DUMMY_AND:%.*]] = and i1 [[NOT_NULL]], [[DUMMY_COND:%.*]]
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[DUMMY_AND]]) [ "deopt"() ]
; CHECK-NEXT: [[CMP11:%.*]] = icmp sgt i32 [[N:%.*]], 0
@@ -1110,16 +1110,16 @@ define void @test17(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
-; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* [[C]], align 4
-; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, i32* [[B:%.*]], i64 [[INDVARS_IV]]
-; CHECK-NEXT: [[TMP2:%.*]] = load i32, i32* [[ARRAYIDX3]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[C]], align 4
+; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[INDVARS_IV]]
+; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP2]], [[TMP1]]
-; CHECK-NEXT: store i32 [[MUL]], i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX]], align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -1133,7 +1133,7 @@ define void @test17(i32* noalias %a, i32* %b, i32* dereferenceable_or_null(4) %c
;
entry:
- %not_null = icmp eq i32* %c, null
+ %not_null = icmp eq ptr %c, null
%dummy_and = and i1 %not_null, %dummy_cond
call void(i1, ...) @llvm.experimental.guard(i1 %dummy_and) [ "deopt"() ]
%cmp11 = icmp sgt i32 %n, 0
@@ -1141,17 +1141,17 @@ entry:
for.body: ; preds = %entry, %for.inc
%indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+ %0 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %0, 0
br i1 %cmp1, label %if.then, label %for.inc
if.then: ; preds = %for.body
- %1 = load i32, i32* %c, align 4
- %arrayidx3 = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
- %2 = load i32, i32* %arrayidx3, align 4
+ %1 = load i32, ptr %c, align 4
+ %arrayidx3 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+ %2 = load i32, ptr %arrayidx3, align 4
%mul = mul nsw i32 %2, %1
- store i32 %mul, i32* %arrayidx, align 4
+ store i32 %mul, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body, %if.then
diff --git a/llvm/test/Transforms/LICM/hoist-fast-fdiv.ll b/llvm/test/Transforms/LICM/hoist-fast-fdiv.ll
index c48cac4d954d4..4507f295522d1 100644
--- a/llvm/test/Transforms/LICM/hoist-fast-fdiv.ll
+++ b/llvm/test/Transforms/LICM/hoist-fast-fdiv.ll
@@ -32,7 +32,7 @@ end: ; preds = %loop
ret i1 %v16
}
-define void @invariant_fdiv(float* %out, float %arg) {
+define void @invariant_fdiv(ptr %out, float %arg) {
; CHECK-LABEL: @invariant_fdiv(
; CHECK-NEXT: entry:
; CHECK-NEXT: %div = fdiv fast float 4.000000e+00, %arg
@@ -49,8 +49,8 @@ loop: ; preds = %loop, %entry
; CHECK-NOT: fmul
%div = fdiv fast float 4.000000e+00, %arg
%mul = fmul fast float %div, 0x41F0000000000000
- %gep = getelementptr inbounds float, float* %out, i32 %ind
- store float %mul, float* %gep, align 4
+ %gep = getelementptr inbounds float, ptr %out, i32 %ind
+ store float %mul, ptr %gep, align 4
%inc = add nuw nsw i32 %ind, 1
%cond = icmp eq i32 %inc, 1024
br i1 %cond, label %exit, label %loop
diff --git a/llvm/test/Transforms/LICM/hoist-invariant-load.ll b/llvm/test/Transforms/LICM/hoist-invariant-load.ll
index 6562441d77c88..040822319a5d4 100644
--- a/llvm/test/Transforms/LICM/hoist-invariant-load.ll
+++ b/llvm/test/Transforms/LICM/hoist-invariant-load.ll
@@ -2,39 +2,39 @@
; RUN: opt < %s -licm -verify-memoryssa -disable-basic-aa -stats -S 2>&1 | grep "1 licm"
@"\01L_OBJC_METH_VAR_NAME_" = internal global [4 x i8] c"foo\00", section "__TEXT,__objc_methname,cstring_literals", align 1
-@"\01L_OBJC_SELECTOR_REFERENCES_" = internal global i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01L_OBJC_METH_VAR_NAME_", i32 0, i32 0), section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
+@"\01L_OBJC_SELECTOR_REFERENCES_" = internal global ptr @"\01L_OBJC_METH_VAR_NAME_", section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip"
@"\01L_OBJC_IMAGE_INFO" = internal constant [2 x i32] [i32 0, i32 16], section "__DATA, __objc_imageinfo, regular, no_dead_strip"
- at llvm.used = appending global [3 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01L_OBJC_METH_VAR_NAME_", i32 0, i32 0), i8* bitcast (i8** @"\01L_OBJC_SELECTOR_REFERENCES_" to i8*), i8* bitcast ([2 x i32]* @"\01L_OBJC_IMAGE_INFO" to i8*)], section "llvm.metadata"
+ at llvm.used = appending global [3 x ptr] [ptr @"\01L_OBJC_METH_VAR_NAME_", ptr @"\01L_OBJC_SELECTOR_REFERENCES_", ptr @"\01L_OBJC_IMAGE_INFO"], section "llvm.metadata"
-define void @test(i8* %x) uwtable ssp {
+define void @test(ptr %x) uwtable ssp {
entry:
- %x.addr = alloca i8*, align 8
+ %x.addr = alloca ptr, align 8
%i = alloca i32, align 4
- store i8* %x, i8** %x.addr, align 8
- store i32 0, i32* %i, align 4
+ store ptr %x, ptr %x.addr, align 8
+ store i32 0, ptr %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %entry
- %0 = load i32, i32* %i, align 4
+ %0 = load i32, ptr %i, align 4
%cmp = icmp ult i32 %0, 10000
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
- %1 = load i8*, i8** %x.addr, align 8
- %2 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_", !invariant.load !0
- %call = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* %1, i8* %2)
+ %1 = load ptr, ptr %x.addr, align 8
+ %2 = load ptr, ptr @"\01L_OBJC_SELECTOR_REFERENCES_", !invariant.load !0
+ %call = call ptr @objc_msgSend(ptr %1, ptr %2)
br label %for.inc
for.inc: ; preds = %for.body
- %3 = load i32, i32* %i, align 4
+ %3 = load i32, ptr %i, align 4
%inc = add i32 %3, 1
- store i32 %inc, i32* %i, align 4
+ store i32 %inc, ptr %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
ret void
}
-declare i8* @objc_msgSend(i8*, i8*, ...) nonlazybind
+declare ptr @objc_msgSend(ptr, ptr, ...) nonlazybind
!0 = !{}
diff --git a/llvm/test/Transforms/LICM/hoist-load-without-store.ll b/llvm/test/Transforms/LICM/hoist-load-without-store.ll
index 275a531727371..52ab8fd7836b9 100644
--- a/llvm/test/Transforms/LICM/hoist-load-without-store.ll
+++ b/llvm/test/Transforms/LICM/hoist-load-without-store.ll
@@ -12,13 +12,13 @@
;; }
;; }
-define dso_local void @f(i32* nocapture %ptr, i32 %n) {
+define dso_local void @f(ptr nocapture %ptr, i32 %n) {
; CHECK-LABEL: @f(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP7:%.*]] = icmp slt i32 0, [[N:%.*]]
; CHECK-NEXT: br i1 [[CMP7]], label [[FOR_BODY_LR_PH:%.*]], label [[CLEANUP1:%.*]]
; CHECK: for.body.lr.ph:
-; CHECK-NEXT: [[PTR_PROMOTED:%.*]] = load i32, i32* [[PTR:%.*]], align 4
+; CHECK-NEXT: [[PTR_PROMOTED:%.*]] = load i32, ptr [[PTR:%.*]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[TMP0:%.*]] = phi i32 [ [[PTR_PROMOTED]], [[FOR_BODY_LR_PH]] ], [ 1, [[IF_END:%.*]] ]
@@ -26,7 +26,7 @@ define dso_local void @f(i32* nocapture %ptr, i32 %n) {
; CHECK-NEXT: [[TOBOOL_NOT:%.*]] = icmp eq i32 [[TMP0]], 0
; CHECK-NEXT: br i1 [[TOBOOL_NOT]], label [[IF_END]], label [[FOR_BODY_CLEANUP1_CRIT_EDGE:%.*]]
; CHECK: if.end:
-; CHECK-NEXT: store i32 1, i32* [[PTR]], align 4
+; CHECK-NEXT: store i32 1, ptr [[PTR]], align 4
; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_08]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[INC]], [[N]]
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_COND_CLEANUP1_CRIT_EDGE:%.*]]
@@ -46,12 +46,12 @@ for.body.lr.ph: ; preds = %entry
for.body: ; preds = %for.body.lr.ph, %if.end
%i.08 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %if.end ]
- %0 = load i32, i32* %ptr, align 4
+ %0 = load i32, ptr %ptr, align 4
%tobool.not = icmp eq i32 %0, 0
br i1 %tobool.not, label %if.end, label %for.body.cleanup1_crit_edge
if.end: ; preds = %for.body
- store i32 1, i32* %ptr, align 4
+ store i32 1, ptr %ptr, align 4
%inc = add nuw nsw i32 %i.08, 1
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.body, label %for.cond.cleanup1_crit_edge
diff --git a/llvm/test/Transforms/LICM/hoist-mustexec.ll b/llvm/test/Transforms/LICM/hoist-mustexec.ll
index 592e20566a822..8d66071e5d7dc 100644
--- a/llvm/test/Transforms/LICM/hoist-mustexec.ll
+++ b/llvm/test/Transforms/LICM/hoist-mustexec.ll
@@ -8,10 +8,10 @@ declare void @f() nounwind
declare void @llvm.experimental.guard(i1,...)
; constant fold on first ieration
-define i32 @test1(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test1(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test1(
entry:
-; CHECK: %i1 = load i32, i32* %a, align 4
+; CHECK: %i1 = load i32, ptr %a, align 4
; CHECK-NEXT: br label %for.body
br label %for.body
@@ -21,7 +21,7 @@ for.body:
%r.chk = icmp ult i32 %iv, 2000
br i1 %r.chk, label %continue, label %fail
continue:
- %i1 = load i32, i32* %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%inc = add nuw nsw i32 %iv, 1
%exitcond = icmp eq i32 %inc, 1000
@@ -36,10 +36,10 @@ fail:
}
; Same as test1, but with a floating point IR and fcmp
-define i32 @test_fcmp(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test_fcmp(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test_fcmp(
entry:
-; CHECK: %i1 = load i32, i32* %a, align 4
+; CHECK: %i1 = load i32, ptr %a, align 4
; CHECK-NEXT: br label %for.body
br label %for.body
@@ -49,7 +49,7 @@ for.body:
%r.chk = fcmp olt float %iv, 2000.0
br i1 %r.chk, label %continue, label %fail
continue:
- %i1 = load i32, i32* %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%inc = fadd float %iv, 1.0
%exitcond = fcmp ogt float %inc, 1000.0
@@ -66,10 +66,10 @@ fail:
; Count down from a.length w/entry guard
; TODO: currently unable to prove the following:
; ule i32 (add nsw i32 %len, -1), %len where len is [0, 512]
-define i32 @test2(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test2(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test2(
entry:
- %len = load i32, i32* %a, align 4, !range !{i32 0, i32 512}
+ %len = load i32, ptr %a, align 4, !range !{i32 0, i32 512}
%is.non.pos = icmp eq i32 %len, 0
br i1 %is.non.pos, label %fail, label %preheader
preheader:
@@ -82,8 +82,8 @@ for.body:
br i1 %r.chk, label %continue, label %fail
continue:
; CHECK-LABEL: continue
-; CHECK: %i1 = load i32, i32* %a, align 4
- %i1 = load i32, i32* %a, align 4
+; CHECK: %i1 = load i32, ptr %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%dec = add nsw i32 %iv, -1
%exitcond = icmp eq i32 %dec, 0
@@ -98,14 +98,14 @@ fail:
}
; trivially true for zero
-define i32 @test3(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test3(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test3(
entry:
- %len = load i32, i32* %a, align 4, !range !{i32 0, i32 512}
+ %len = load i32, ptr %a, align 4, !range !{i32 0, i32 512}
%is.zero = icmp eq i32 %len, 0
br i1 %is.zero, label %fail, label %preheader
preheader:
-; CHECK: %i1 = load i32, i32* %a, align 4
+; CHECK: %i1 = load i32, ptr %a, align 4
; CHECK-NEXT: br label %for.body
br label %for.body
for.body:
@@ -114,7 +114,7 @@ for.body:
%r.chk = icmp ule i32 %iv, %len
br i1 %r.chk, label %continue, label %fail
continue:
- %i1 = load i32, i32* %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%inc = add nuw nsw i32 %iv, 1
%exitcond = icmp eq i32 %inc, 1000
@@ -129,14 +129,14 @@ fail:
}
; requires fact length is non-zero
-define i32 @test4(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test4(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test4(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[LEN:%.*]] = load i32, i32* [[A:%.*]], align 4, !range !0
+; CHECK-NEXT: [[LEN:%.*]] = load i32, ptr [[A:%.*]], align 4, !range !0
; CHECK-NEXT: [[IS_ZERO:%.*]] = icmp eq i32 [[LEN]], 0
; CHECK-NEXT: br i1 [[IS_ZERO]], label [[FAIL:%.*]], label [[PREHEADER:%.*]]
; CHECK: preheader:
-; CHECK-NEXT: [[I1:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT: [[I1:%.*]] = load i32, ptr [[A]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[PREHEADER]] ], [ [[INC:%.*]], [[CONTINUE:%.*]] ]
@@ -158,7 +158,7 @@ define i32 @test4(i32* noalias nocapture readonly %a) nounwind uwtable {
; CHECK-NEXT: ret i32 -1
;
entry:
- %len = load i32, i32* %a, align 4, !range !{i32 0, i32 512}
+ %len = load i32, ptr %a, align 4, !range !{i32 0, i32 512}
%is.zero = icmp eq i32 %len, 0
br i1 %is.zero, label %fail, label %preheader
preheader:
@@ -169,7 +169,7 @@ for.body:
%r.chk = icmp ult i32 %iv, %len
br i1 %r.chk, label %continue, label %fail
continue:
- %i1 = load i32, i32* %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%inc = add nuw nsw i32 %iv, 1
%exitcond = icmp eq i32 %inc, 1000
@@ -184,10 +184,10 @@ fail:
}
; variation on test1 with branch swapped
-define i32 @test-brswap(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test-brswap(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test-brswap(
entry:
-; CHECK: %i1 = load i32, i32* %a, align 4
+; CHECK: %i1 = load i32, ptr %a, align 4
; CHECK-NEXT: br label %for.body
br label %for.body
@@ -197,7 +197,7 @@ for.body:
%r.chk = icmp ugt i32 %iv, 2000
br i1 %r.chk, label %fail, label %continue
continue:
- %i1 = load i32, i32* %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%inc = add nuw nsw i32 %iv, 1
%exitcond = icmp eq i32 %inc, 1000
@@ -211,21 +211,21 @@ fail:
ret i32 -1
}
-define i32 @test-nonphi(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test-nonphi(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test-nonphi(
entry:
br label %for.body
for.body:
; CHECK-LABEL: continue
-; CHECK: %i1 = load i32, i32* %a, align 4
+; CHECK: %i1 = load i32, ptr %a, align 4
%iv = phi i32 [ 0, %entry ], [ %inc, %continue ]
%acc = phi i32 [ 0, %entry ], [ %add, %continue ]
%xor = xor i32 %iv, 72
%r.chk = icmp ugt i32 %xor, 2000
br i1 %r.chk, label %fail, label %continue
continue:
- %i1 = load i32, i32* %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%inc = add nuw nsw i32 %iv, 1
%exitcond = icmp eq i32 %inc, 1000
@@ -239,7 +239,7 @@ fail:
ret i32 -1
}
-define i32 @test-wrongphi(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test-wrongphi(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test-wrongphi(
entry:
br label %for.body
@@ -259,8 +259,8 @@ dummy_block2:
br i1 %r.chk, label %fail, label %continue
continue:
; CHECK-LABEL: continue
-; CHECK: %i1 = load i32, i32* %a, align 4
- %i1 = load i32, i32* %a, align 4
+; CHECK: %i1 = load i32, ptr %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%inc = add nuw nsw i32 %iv, 1
%exitcond = icmp eq i32 %inc, 1000
@@ -275,10 +275,10 @@ fail:
}
; This works because loop-simplify is run implicitly, but test for it anyways
-define i32 @test-multiple-latch(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test-multiple-latch(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test-multiple-latch(
entry:
-; CHECK: %i1 = load i32, i32* %a, align 4
+; CHECK: %i1 = load i32, ptr %a, align 4
; CHECK-NEXT: br label %for.body
br label %for.body
@@ -288,7 +288,7 @@ for.body:
%r.chk = icmp ult i32 %iv, 2000
br i1 %r.chk, label %continue1, label %fail
continue1:
- %i1 = load i32, i32* %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %acc
%inc = add nuw nsw i32 %iv, 1
%cmp = icmp eq i32 %add, 0
@@ -305,11 +305,11 @@ fail:
ret i32 -1
}
-define void @test-hoisting-in-presence-of-guards(i1 %c, i32* %p) {
+define void @test-hoisting-in-presence-of-guards(i1 %c, ptr %p) {
; CHECK-LABEL: @test-hoisting-in-presence-of-guards
; CHECK: entry:
-; CHECK: %a = load i32, i32* %p
+; CHECK: %a = load i32, ptr %p
; CHECK: %invariant_cond = icmp ne i32 %a, 100
; CHECK: loop:
@@ -319,7 +319,7 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
%iv.next = add i32 %iv, 1
- %a = load i32, i32* %p
+ %a = load i32, ptr %p
%invariant_cond = icmp ne i32 %a, 100
call void (i1, ...) @llvm.experimental.guard(i1 %invariant_cond) [ "deopt"() ]
%loop_cond = icmp slt i32 %iv.next, 1000
@@ -334,11 +334,11 @@ declare void @may_throw() inaccessiblememonly
; Test that we can sink a mustexecute load from loop header even in presence of
; throwing instructions after it.
-define void @test_hoist_from_header_01(i32* %p, i32 %n) {
+define void @test_hoist_from_header_01(ptr %p, i32 %n) {
; CHECK-LABEL: @test_hoist_from_header_01(
; CHECK: entry:
-; CHECK-NEXT: %load = load i32, i32* %p
+; CHECK-NEXT: %load = load i32, ptr %p
; CHECK-NOT: load i32
entry:
@@ -347,7 +347,7 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
%dummy = phi i32 [ 0, %entry ], [ %merge, %backedge ]
- %load = load i32, i32* %p
+ %load = load i32, ptr %p
call void @may_throw()
%cond = icmp slt i32 %iv, %n
br i1 %cond, label %if.true, label %if.false
@@ -370,11 +370,11 @@ exit:
ret void
}
-define void @test_hoist_from_header_02(i32* %p, i32 %n) {
+define void @test_hoist_from_header_02(ptr %p, i32 %n) {
; CHECK-LABEL: @test_hoist_from_header_02(
; CHECK: entry:
-; CHECK-NEXT: %load = load i32, i32* %p
+; CHECK-NEXT: %load = load i32, ptr %p
; CHECK-NOT: load i32
entry:
@@ -383,7 +383,7 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
%dummy = phi i32 [ 0, %entry ], [ %merge, %backedge ]
- %load = load i32, i32* %p
+ %load = load i32, ptr %p
%cond = icmp slt i32 %iv, %n
br i1 %cond, label %if.true, label %if.false
@@ -406,11 +406,11 @@ exit:
ret void
}
-define void @test_hoist_from_header_03(i32* %p, i32 %n) {
+define void @test_hoist_from_header_03(ptr %p, i32 %n) {
; CHECK-LABEL: @test_hoist_from_header_03(
; CHECK: entry:
-; CHECK-NEXT: %load = load i32, i32* %p
+; CHECK-NEXT: %load = load i32, ptr %p
; CHECK-NOT: load i32
entry:
@@ -419,7 +419,7 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
%dummy = phi i32 [ 0, %entry ], [ %merge, %backedge ]
- %load = load i32, i32* %p
+ %load = load i32, ptr %p
%cond = icmp slt i32 %iv, %n
br i1 %cond, label %if.true, label %if.false
@@ -443,12 +443,12 @@ exit:
}
; Check that a throwing instruction prohibits hoisting across it.
-define void @test_hoist_from_header_04(i32* %p, i32 %n) {
+define void @test_hoist_from_header_04(ptr %p, i32 %n) {
; CHECK-LABEL: @test_hoist_from_header_04(
; CHECK: entry:
; CHECK: loop:
-; CHECK: %load = load i32, i32* %p
+; CHECK: %load = load i32, ptr %p
entry:
br label %loop
@@ -457,7 +457,7 @@ loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
%dummy = phi i32 [ 0, %entry ], [ %merge, %backedge ]
call void @may_throw()
- %load = load i32, i32* %p
+ %load = load i32, ptr %p
%cond = icmp slt i32 %iv, %n
br i1 %cond, label %if.true, label %if.false
@@ -481,11 +481,11 @@ exit:
; Check that we can hoist a mustexecute load from backedge even if something
; throws after it.
-define void @test_hoist_from_backedge_01(i32* %p, i32 %n) {
+define void @test_hoist_from_backedge_01(ptr %p, i32 %n) {
; CHECK-LABEL: @test_hoist_from_backedge_01(
; CHECK: entry:
-; CHECK-NEXT: %load = load i32, i32* %p
+; CHECK-NEXT: %load = load i32, ptr %p
; CHECK-NOT: load i32
entry:
@@ -508,7 +508,7 @@ if.false:
backedge:
%merge = phi i32 [ %a, %if.true ], [ %b, %if.false ]
%iv.next = add i32 %iv, %merge
- %load = load i32, i32* %p
+ %load = load i32, ptr %p
call void @may_throw()
%loop.cond = icmp ult i32 %iv.next, %load
br i1 %loop.cond, label %loop, label %exit
@@ -518,12 +518,12 @@ exit:
}
; Check that we don't hoist the load if something before it can throw.
-define void @test_hoist_from_backedge_02(i32* %p, i32 %n) {
+define void @test_hoist_from_backedge_02(ptr %p, i32 %n) {
; CHECK-LABEL: @test_hoist_from_backedge_02(
; CHECK: entry:
; CHECK: loop:
-; CHECK: %load = load i32, i32* %p
+; CHECK: %load = load i32, ptr %p
entry:
br label %loop
@@ -546,7 +546,7 @@ backedge:
%merge = phi i32 [ %a, %if.true ], [ %b, %if.false ]
%iv.next = add i32 %iv, %merge
call void @may_throw()
- %load = load i32, i32* %p
+ %load = load i32, ptr %p
%loop.cond = icmp ult i32 %iv.next, %load
br i1 %loop.cond, label %loop, label %exit
@@ -554,12 +554,12 @@ exit:
ret void
}
-define void @test_hoist_from_backedge_03(i32* %p, i32 %n) {
+define void @test_hoist_from_backedge_03(ptr %p, i32 %n) {
; CHECK-LABEL: @test_hoist_from_backedge_03(
; CHECK: entry:
; CHECK: loop:
-; CHECK: %load = load i32, i32* %p
+; CHECK: %load = load i32, ptr %p
entry:
br label %loop
@@ -582,7 +582,7 @@ if.false:
backedge:
%merge = phi i32 [ %a, %if.true ], [ %b, %if.false ]
%iv.next = add i32 %iv, %merge
- %load = load i32, i32* %p
+ %load = load i32, ptr %p
%loop.cond = icmp ult i32 %iv.next, %load
br i1 %loop.cond, label %loop, label %exit
@@ -590,12 +590,12 @@ exit:
ret void
}
-define void @test_hoist_from_backedge_04(i32* %p, i32 %n) {
+define void @test_hoist_from_backedge_04(ptr %p, i32 %n) {
; CHECK-LABEL: @test_hoist_from_backedge_04(
; CHECK: entry:
; CHECK: loop:
-; CHECK: %load = load i32, i32* %p
+; CHECK: %load = load i32, ptr %p
entry:
br label %loop
@@ -618,7 +618,7 @@ if.false:
backedge:
%merge = phi i32 [ %a, %if.true ], [ %b, %if.false ]
%iv.next = add i32 %iv, %merge
- %load = load i32, i32* %p
+ %load = load i32, ptr %p
%loop.cond = icmp ult i32 %iv.next, %load
br i1 %loop.cond, label %loop, label %exit
diff --git a/llvm/test/Transforms/LICM/hoist-nounwind.ll b/llvm/test/Transforms/LICM/hoist-nounwind.ll
index 59f2f803364e1..1db810f0bcef4 100644
--- a/llvm/test/Transforms/LICM/hoist-nounwind.ll
+++ b/llvm/test/Transforms/LICM/hoist-nounwind.ll
@@ -6,7 +6,7 @@ target triple = "x86_64-unknown-linux-gnu"
declare void @f() nounwind
; Don't hoist load past nounwind call.
-define i32 @test1(i32* noalias nocapture readonly %a) nounwind uwtable {
+define i32 @test1(ptr noalias nocapture readonly %a) nounwind uwtable {
; CHECK-LABEL: @test1(
entry:
br label %for.body
@@ -17,7 +17,7 @@ for.body:
%i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
%x.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
tail call void @f() nounwind
- %i1 = load i32, i32* %a, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %x.05
%inc = add nuw nsw i32 %i.06, 1
%exitcond = icmp eq i32 %inc, 1000
@@ -50,7 +50,7 @@ for.cond.cleanup:
}
; Hoist a non-volatile load past volatile load.
-define i32 @test3(i32* noalias nocapture readonly %a, i32* %v) nounwind uwtable {
+define i32 @test3(ptr noalias nocapture readonly %a, ptr %v) nounwind uwtable {
; CHECK-LABEL: @test3(
entry:
br label %for.body
@@ -62,8 +62,8 @@ entry:
for.body:
%i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
%x.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
- %xxx = load volatile i32, i32* %v, align 4
- %i1 = load i32, i32* %a, align 4
+ %xxx = load volatile i32, ptr %v, align 4
+ %i1 = load i32, ptr %a, align 4
%add = add nsw i32 %i1, %x.05
%inc = add nuw nsw i32 %i.06, 1
%exitcond = icmp eq i32 %inc, 1000
@@ -74,7 +74,7 @@ for.cond.cleanup:
}
; Don't a volatile load past volatile load.
-define i32 @test4(i32* noalias nocapture readonly %a, i32* %v) nounwind uwtable {
+define i32 @test4(ptr noalias nocapture readonly %a, ptr %v) nounwind uwtable {
; CHECK-LABEL: @test4(
entry:
br label %for.body
@@ -85,8 +85,8 @@ entry:
for.body:
%i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
%x.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
- %xxx = load volatile i32, i32* %v, align 4
- %i1 = load volatile i32, i32* %a, align 4
+ %xxx = load volatile i32, ptr %v, align 4
+ %i1 = load volatile i32, ptr %a, align 4
%add = add nsw i32 %i1, %x.05
%inc = add nuw nsw i32 %i.06, 1
%exitcond = icmp eq i32 %inc, 1000
diff --git a/llvm/test/Transforms/LICM/hoist-phi.ll b/llvm/test/Transforms/LICM/hoist-phi.ll
index 005690dd0ba4e..25fc2add39c5f 100644
--- a/llvm/test/Transforms/LICM/hoist-phi.ll
+++ b/llvm/test/Transforms/LICM/hoist-phi.ll
@@ -4,12 +4,12 @@
; RUN: opt -passes='require<opt-remark-emit>,loop-mssa(licm)' -S < %s | FileCheck %s -check-prefixes=CHECK,CHECK-DISABLED
; RUN: opt -passes='require<opt-remark-emit>,loop-mssa(licm)' -licm-control-flow-hoisting=1 -verify-memoryssa -S < %s | FileCheck %s -check-prefixes=CHECK,CHECK-ENABLED
-; Enable run below when adding promotion. e.g. "store i32 %phi, i32* %p" is promoted to phi.lcssa.
+; Enable run below when adding promotion. e.g. "store i32 %phi, ptr %p" is promoted to phi.lcssa.
; opt -passes='require<opt-remark-emit>,loop-mssa(licm)' -licm-control-flow-hoisting=0 -verify-memoryssa -S < %s | FileCheck %s -check-prefixes=CHECK,CHECK-DISABLED
; CHECK-LABEL: @triangle_phi
-define void @triangle_phi(i32 %x, i32* %p) {
+define void @triangle_phi(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK: %cmp1 = icmp sgt i32 %x, 0
; CHECK-ENABLED: br i1 %cmp1, label %[[IF_LICM:.*]], label %[[THEN_LICM:.*]]
@@ -22,7 +22,7 @@ entry:
; CHECK-ENABLED: [[THEN_LICM]]:
; CHECK-ENABLED: phi i32 [ %add, %[[IF_LICM]] ], [ %x, %entry ]
-; CHECK-ENABLED: store i32 %phi, i32* %p
+; CHECK-ENABLED: store i32 %phi, ptr %p
; CHECK-ENABLED: %cmp2 = icmp ne i32 %phi, 0
; CHECK: br label %loop
@@ -39,19 +39,19 @@ if:
; CHECK-DISABLED: %cmp2 = icmp ne i32 %phi, 0
then:
%phi = phi i32 [ %add, %if ], [ %x, %loop ]
- store i32 %phi, i32* %p
+ store i32 %phi, ptr %p
%cmp2 = icmp ne i32 %phi, 0
br i1 %cmp2, label %loop, label %end
; CHECK-LABEL: end:
; CHECK-DISABLED: %[[PHI_LCSSA:.*]] = phi i32 [ %phi, %then ]
-; CHECK-DISABLED: store i32 %[[PHI_LCSSA]], i32* %p
+; CHECK-DISABLED: store i32 %[[PHI_LCSSA]], ptr %p
end:
ret void
}
; CHECK-LABEL: @diamond_phi
-define void @diamond_phi(i32 %x, i32* %p) {
+define void @diamond_phi(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK: %cmp1 = icmp sgt i32 %x, 0
; CHECK-ENABLED: br i1 %cmp1, label %[[IF_LICM:.*]], label %[[ELSE_LICM:.*]]
@@ -68,7 +68,7 @@ entry:
; CHECK-ENABLED: [[THEN_LICM]]
; CHECK-ENABLED: %phi = phi i32 [ %add, %[[IF_LICM]] ], [ %sub, %[[ELSE_LICM]] ]
-; CHECK-ENABLED: store i32 %phi, i32* %p
+; CHECK-ENABLED: store i32 %phi, ptr %p
; CHECK-ENABLED: %cmp2 = icmp ne i32 %phi, 0
; CHECK: br label %loop
@@ -89,20 +89,20 @@ else:
; CHECK-DISABLED: %cmp2 = icmp ne i32 %phi, 0
then:
%phi = phi i32 [ %add, %if ], [ %sub, %else ]
- store i32 %phi, i32* %p
+ store i32 %phi, ptr %p
%cmp2 = icmp ne i32 %phi, 0
br i1 %cmp2, label %loop, label %end
; CHECK-LABEL: end:
; CHECK-DISABLED: %[[PHI_LCSSA:.*]] = phi i32 [ %phi, %then ]
-; CHECK-DISABLED: store i32 %[[PHI_LCSSA]], i32* %p
+; CHECK-DISABLED: store i32 %[[PHI_LCSSA]], ptr %p
end:
ret void
}
; TODO: This is currently too complicated for us to be able to hoist the phi.
; CHECK-LABEL: @three_way_phi
-define void @three_way_phi(i32 %x, i32* %p) {
+define void @three_way_phi(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cmp1 = icmp sgt i32 %x, 0
; CHECK-DAG: %add = add i32 %x, 1
@@ -134,7 +134,7 @@ if.if:
then:
%phi = phi i32 [ 0, %loop ], [ %add, %if ], [ %sub, %if.if ]
- store i32 %phi, i32* %p
+ store i32 %phi, ptr %p
%cmp3 = icmp ne i32 %phi, 0
br i1 %cmp3, label %loop, label %end
@@ -144,7 +144,7 @@ end:
; TODO: This is currently too complicated for us to be able to hoist the phi.
; CHECK-LABEL: @tree_phi
-define void @tree_phi(i32 %x, i32* %p) {
+define void @tree_phi(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cmp1 = icmp sgt i32 %x, 0
; CHECK-DAG: %add = add i32 %x, 1
@@ -176,7 +176,7 @@ else:
then:
%phi = phi i32 [ %add, %if.if ], [ 0, %if.else ], [ %sub, %else ]
- store i32 %phi, i32* %p
+ store i32 %phi, ptr %p
%cmp3 = icmp ne i32 %phi, 0
br i1 %cmp3, label %loop, label %end
@@ -186,7 +186,7 @@ end:
; TODO: We can hoist the first phi, but not the second.
; CHECK-LABEL: @phi_phi
-define void @phi_phi(i32 %x, i32* %p) {
+define void @phi_phi(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cmp1 = icmp sgt i32 %x, 0
; CHECK-DAG: %add = add i32 %x, 1
@@ -236,7 +236,7 @@ else:
; CHECK: %phi2 = phi i32 [ %phi1, %if.then ], [ %sub, %else ]
then:
%phi2 = phi i32 [ %phi1, %if.then ], [ %sub, %else ]
- store i32 %phi2, i32* %p
+ store i32 %phi2, ptr %p
%cmp3 = icmp ne i32 %phi2, 0
br i1 %cmp3, label %loop, label %end
@@ -469,7 +469,7 @@ end:
; The phi is on one branch of a diamond while simultaneously at the end of a
; triangle. Check that we duplicate the triangle and not the diamond.
; CHECK-LABEL: @triangle_diamond
-define void @triangle_diamond(i32* %ptr, i32 %x, i32 %y) {
+define void @triangle_diamond(ptr %ptr, i32 %x, i32 %y) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cmp1 = icmp ne i32 %x, 0
; CHECK-DAG: %cmp2 = icmp ne i32 %y, 0
@@ -496,7 +496,7 @@ if:
; CHECK-DISABLED: %phi = phi i32 [ 0, %if ], [ 127, %loop ]
then:
%phi = phi i32 [ 0, %if ], [ 127, %loop ]
- store i32 %phi, i32* %ptr
+ store i32 %phi, ptr %ptr
br label %end
if.then:
@@ -508,7 +508,7 @@ end:
; As the previous, but the end of the diamond is the head of the loop.
; CHECK-LABEL: @triangle_diamond_backedge
-define void @triangle_diamond_backedge(i32* %ptr, i32 %x, i32 %y) {
+define void @triangle_diamond_backedge(ptr %ptr, i32 %x, i32 %y) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cmp1 = icmp ne i32 %x, 0
; CHECK-DAG: %cmp2 = icmp ne i32 %y, 0
@@ -535,7 +535,7 @@ if:
; CHECK-DISABLED: %phi = phi i32 [ 0, %if ], [ 127, %loop ]
then:
%phi = phi i32 [ 0, %if ], [ 127, %loop ]
- store i32 %phi, i32* %ptr
+ store i32 %phi, ptr %ptr
br label %loop
backedge:
@@ -544,7 +544,7 @@ backedge:
; TODO: The inner diamonds can be hoisted, but not currently the outer diamond
; CHECK-LABEL: @diamonds_inside_diamond
-define void @diamonds_inside_diamond(i32 %x, i32* %p) {
+define void @diamonds_inside_diamond(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cmp1 = icmp sgt i32 %x, 0
; CHECK-DAG: %cmp3 = icmp slt i32 %x, -10
@@ -614,7 +614,7 @@ else.then:
; CHECK: %cmp4 = icmp ne i32 %phi3, 0
then:
%phi3 = phi i32 [ %phi1, %if.then ], [ %phi2, %else.then ]
- store i32 %phi3, i32* %p
+ store i32 %phi3, ptr %p
%cmp4 = icmp ne i32 %phi3, 0
br i1 %cmp4, label %loop, label %end
@@ -625,7 +625,7 @@ end:
; We can hoist blocks that contain an edge that exits the loop by ignoring that
; edge in the hoisted block.
; CHECK-LABEL: @triangle_phi_loopexit
-define void @triangle_phi_loopexit(i32 %x, i32* %p) {
+define void @triangle_phi_loopexit(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK-DAG: %add = add i32 %x, 1
; CHECK-DAG: %cmp1 = icmp sgt i32 %x, 0
@@ -654,7 +654,7 @@ if:
; CHECK-DISABLED: %phi = phi i32 [ %add, %if ], [ %x, %loop ]
then:
%phi = phi i32 [ %add, %if ], [ %x, %loop ]
- store i32 %phi, i32* %p
+ store i32 %phi, ptr %p
%cmp3 = icmp ne i32 %phi, 0
br i1 %cmp3, label %loop, label %end
@@ -663,7 +663,7 @@ end:
}
; CHECK-LABEL: @diamond_phi_oneloopexit
-define void @diamond_phi_oneloopexit(i32 %x, i32* %p) {
+define void @diamond_phi_oneloopexit(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK-DAG: %add = add i32 %x, 1
; CHECK-DAG: %cmp1 = icmp sgt i32 %x, 0
@@ -701,7 +701,7 @@ else:
; CHECK-DISABLED: %phi = phi i32 [ %add, %if ], [ %sub, %else ]
then:
%phi = phi i32 [ %add, %if ], [ %sub, %else ]
- store i32 %phi, i32* %p
+ store i32 %phi, ptr %p
%cmp3 = icmp ne i32 %phi, 0
br i1 %cmp3, label %loop, label %end
@@ -710,7 +710,7 @@ end:
}
; CHECK-LABEL: @diamond_phi_twoloopexit
-define void @diamond_phi_twoloopexit(i32 %x, i32* %p) {
+define void @diamond_phi_twoloopexit(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK-DAG: %sub = sub i32 %x, 1
; CHECK-DAG: %add = add i32 %x, 1
@@ -751,7 +751,7 @@ else:
; CHECK-DISABLED: %cmp4 = icmp ne i32 %phi, 0
then:
%phi = phi i32 [ %add, %if ], [ %sub, %else ]
- store i32 %phi, i32* %p
+ store i32 %phi, ptr %p
%cmp4 = icmp ne i32 %phi, 0
br i1 %cmp4, label %loop, label %end
@@ -762,7 +762,7 @@ end:
; The store cannot be hoisted, so add and shr cannot be hoisted into a
; conditional block.
; CHECK-LABEL: @conditional_use
-define void @conditional_use(i32 %x, i32* %p) {
+define void @conditional_use(i32 %x, ptr %p) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cond = icmp ugt i32 %x, 0
; CHECK-DAG: %add = add i32 %x, 5
@@ -776,11 +776,11 @@ loop:
br i1 %cond, label %if, label %else
; CHECK-LABEL: if:
-; CHECK: store i32 %shr, i32* %p, align 4
+; CHECK: store i32 %shr, ptr %p, align 4
if:
%add = add i32 %x, 5
%shr = ashr i32 %add, 1
- store i32 %shr, i32* %p, align 4
+ store i32 %shr, ptr %p, align 4
br label %then
else:
@@ -794,9 +794,9 @@ then:
; to check that we have a unique loop preheader when we hoist the store (and so
; don't fail an assertion).
; CHECK-LABEL: @triangles_in_diamond
-define void @triangles_in_diamond(i32* %ptr) {
+define void @triangles_in_diamond(ptr %ptr) {
; CHECK-LABEL: entry:
-; CHECK: store i32 0, i32* %ptr, align 4
+; CHECK: store i32 0, ptr %ptr, align 4
; CHECK: br label %loop
entry:
br label %loop
@@ -829,16 +829,15 @@ right_triangle.then:
br label %loop.end
loop.end:
- store i32 0, i32* %ptr, align 4
+ store i32 0, ptr %ptr, align 4
br label %loop
}
; %cmp dominates its used after being hoisted, but not after %brmerge is rehoisted
; CHECK-LABEL: @rehoist
-define void @rehoist(i8* %this, i32 %x) {
+define void @rehoist(ptr %this, i32 %x) {
; CHECK-LABEL: entry:
; CHECK-DAG: %sub = add nsw i32 %x, -1
-; CHECK-DAG: %fptr = bitcast i8* %this to void (i8*)*
; CHECK-DAG: %cmp = icmp eq i32 0, %sub
; CHECK-DAG: %brmerge = or i1 %cmp, true
entry:
@@ -849,8 +848,7 @@ loop:
br i1 undef, label %if1, label %else1
if1:
- %fptr = bitcast i8* %this to void (i8*)*
- call void %fptr(i8* %this)
+ call void %this(ptr %this)
br label %then1
else1:
@@ -874,7 +872,7 @@ end:
; A test case that uses empty blocks in a way that can cause control flow
; hoisting to get confused.
; CHECK-LABEL: @empty_blocks_multiple_conditional_branches
-define void @empty_blocks_multiple_conditional_branches(float %arg, float* %ptr) {
+define void @empty_blocks_multiple_conditional_branches(float %arg, ptr %ptr) {
; CHECK-LABEL: entry
; CHECK-DAG: %div1 = fmul float %arg, 4.000000e+00
; CHECK-DAG: %div2 = fmul float %arg, 2.000000e+00
@@ -912,7 +910,7 @@ cond2.if:
; CHECK-DISABLED: %phi = phi float [ 0.000000e+00, %cond2 ], [ %div1, %cond2.if ]
cond2.then:
%phi = phi float [ 0.000000e+00, %cond2 ], [ %div1, %cond2.if ]
- store float %phi, float* %ptr
+ store float %phi, ptr %ptr
br label %backedge2
cond3:
@@ -920,7 +918,7 @@ cond3:
cond3.if:
%div2 = fmul float %arg, 2.000000e+00
- store float %div2, float* %ptr
+ store float %div2, ptr %ptr
br label %cond3.then
cond3.then:
@@ -932,10 +930,10 @@ backedge2:
; We can't do much here, so mainly just check that we don't crash.
; CHECK-LABEL: @many_path_phi
-define void @many_path_phi(i32* %ptr1, i32* %ptr2) {
+define void @many_path_phi(ptr %ptr1, ptr %ptr2) {
; CHECK-LABEL: entry:
-; CHECK-DAG: %gep3 = getelementptr inbounds i32, i32* %ptr2, i32 2
-; CHECK-DAG: %gep2 = getelementptr inbounds i32, i32* %ptr2, i32 2
+; CHECK-DAG: %gep3 = getelementptr inbounds i32, ptr %ptr2, i32 2
+; CHECK-DAG: %gep2 = getelementptr inbounds i32, ptr %ptr2, i32 2
; CHECK: br label %loop
entry:
br label %loop
@@ -949,8 +947,8 @@ cond1:
br i1 undef, label %end, label %cond1.else
cond1.else:
- %gep2 = getelementptr inbounds i32, i32* %ptr2, i32 2
- %val2 = load i32, i32* %gep2, align 4
+ %gep2 = getelementptr inbounds i32, ptr %ptr2, i32 2
+ %val2 = load i32, ptr %gep2, align 4
%cmp2 = icmp eq i32 %val2, 13
br i1 %cmp2, label %cond1.end, label %end
@@ -961,8 +959,8 @@ cond2:
br i1 undef, label %end, label %cond2.else
cond2.else:
- %gep3 = getelementptr inbounds i32, i32* %ptr2, i32 2
- %val3 = load i32, i32* %gep3, align 4
+ %gep3 = getelementptr inbounds i32, ptr %ptr2, i32 2
+ %val3 = load i32, ptr %gep3, align 4
%cmp3 = icmp eq i32 %val3, 13
br i1 %cmp3, label %cond2.end, label %end
@@ -977,9 +975,9 @@ end:
; Check that we correctly handle the hoisting of %gep when theres a critical
; edge that branches to the preheader.
; CHECK-LABEL: @crit_edge
-define void @crit_edge(i32* %ptr, i32 %idx, i1 %cond1, i1 %cond2) {
+define void @crit_edge(ptr %ptr, i32 %idx, i1 %cond1, i1 %cond2) {
; CHECK-LABEL: entry:
-; CHECK: %gep = getelementptr inbounds i32, i32* %ptr, i32 %idx
+; CHECK: %gep = getelementptr inbounds i32, ptr %ptr, i32 %idx
; CHECK: br label %preheader
entry:
br label %preheader
@@ -991,13 +989,13 @@ loop:
br i1 %cond1, label %then, label %if
if:
- %gep = getelementptr inbounds i32, i32* %ptr, i32 %idx
- %val = load i32, i32* %gep
+ %gep = getelementptr inbounds i32, ptr %ptr, i32 %idx
+ %val = load i32, ptr %gep
br label %then
then:
%phi = phi i32 [ %val, %if ], [ 0, %loop ]
- store i32 %phi, i32* %ptr
+ store i32 %phi, ptr %ptr
br i1 %cond2, label %loop, label %crit_edge
crit_edge:
@@ -1007,7 +1005,7 @@ crit_edge:
; Check that the conditional sub is correctly hoisted from the inner loop to the
; preheader of the outer loop.
; CHECK-LABEL: @hoist_from_innermost_loop
-define void @hoist_from_innermost_loop(i32 %nx, i32* %ptr) {
+define void @hoist_from_innermost_loop(i32 %nx, ptr %ptr) {
; CHECK-LABEL: entry:
; CHECK-DAG: %sub = sub nsw i32 0, %nx
; CHECK: br label %outer_loop
@@ -1025,7 +1023,7 @@ inner_loop:
if:
%sub = sub nsw i32 0, %nx
- store i32 %sub, i32* %ptr, align 4
+ store i32 %sub, ptr %ptr, align 4
br label %inner_loop_end
inner_loop_end:
@@ -1041,10 +1039,10 @@ outer_loop_end:
; We have a diamond starting from %if, but %if.if is also reachable from %loop,
; so %gep should not be conditionally hoisted.
; CHECK-LABEL: @diamond_with_extra_in_edge
-define void @diamond_with_extra_in_edge(i32* %ptr1, i32* %ptr2, i32 %arg) {
+define void @diamond_with_extra_in_edge(ptr %ptr1, ptr %ptr2, i32 %arg) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cmp2 = icmp ne i32 0, %arg
-; CHECK-DAG: %gep = getelementptr i32, i32* %ptr1, i32 4
+; CHECK-DAG: %gep = getelementptr i32, ptr %ptr1, i32 4
; CHECK: br label %loop
entry:
br label %loop
@@ -1059,8 +1057,8 @@ if:
br i1 %cmp2, label %if.if, label %if.else
if.if:
- %gep = getelementptr i32, i32* %ptr1, i32 4
- %val = load i32, i32* %gep, align 4
+ %gep = getelementptr i32, ptr %ptr1, i32 4
+ %val = load i32, ptr %gep, align 4
br label %then
if.else:
@@ -1068,17 +1066,17 @@ if.else:
then:
%phi2 = phi i32 [ %val, %if.if ], [ %phi1, %if.else ]
- store i32 %phi2, i32* %ptr2, align 4
+ store i32 %phi2, ptr %ptr2, align 4
br label %loop
}
; %loop/%if/%then form a triangle, but %loop/%if/%then/%end also form a diamond.
; The triangle should be picked for conditional hoisting.
; CHECK-LABEL: @both_triangle_and_diamond
-define void @both_triangle_and_diamond(i32* %ptr1, i32* %ptr2, i32 %arg) {
+define void @both_triangle_and_diamond(ptr %ptr1, ptr %ptr2, i32 %arg) {
; CHECK-LABEL: entry:
; CHECK-DAG: %cmp1 = icmp ne i32 0, %arg
-; CHECK-DAG: %gep = getelementptr i32, i32* %ptr1, i32 4
+; CHECK-DAG: %gep = getelementptr i32, ptr %ptr1, i32 4
; CHECK-ENABLED: br i1 %cmp1, label %[[IF_LICM:.*]], label %[[THEN_LICM:.*]]
entry:
br label %loop
@@ -1096,8 +1094,8 @@ loop:
br i1 %cmp1, label %if, label %then
if:
- %gep = getelementptr i32, i32* %ptr1, i32 4
- %val = load i32, i32* %gep, align 4
+ %gep = getelementptr i32, ptr %ptr1, i32 4
+ %val = load i32, ptr %gep, align 4
%cmp2 = icmp ugt i32 16, %phi1
br i1 %cmp2, label %end, label %then
@@ -1109,7 +1107,7 @@ then:
end:
%phi3 = phi i32 [ %phi2, %then ], [ %val, %if ]
- store i32 %phi3, i32* %ptr2, align 4
+ store i32 %phi3, ptr %ptr2, align 4
br label %loop
}
@@ -1235,7 +1233,7 @@ exit:
; hoisted. This means that we have to rehoist %d, but have to make sure to
; rehoist it after %phi.
; CHECK-LABEL: @phi_conditional_use
-define i64 @phi_conditional_use(i32 %f, i32* %g) {
+define i64 @phi_conditional_use(i32 %f, ptr %g) {
; CHECK-LABEL: entry:
; CHECK: %cmp1 = icmp eq i32 %f, 1
; CHECK: %cmp2 = icmp eq i32 %f, 0
@@ -1250,7 +1248,7 @@ entry:
; CHECK-ENABLED: [[IF_END_LICM]]:
; CHECK-ENABLED: %phi = phi i64 [ 0, %entry ], [ 1, %[[IF_THEN_LICM]] ]
-; CHECK-ENABLED: %d = getelementptr inbounds i32, i32* %g, i64 %phi
+; CHECK-ENABLED: %d = getelementptr inbounds i32, ptr %g, i64 %phi
; CHECK-ENABLED: i1 %cmp2, label %[[LOOP_BACKEDGE_LICM:.*]], label %[[IF_THEN2_LICM:.*]]
; CHECK-ENABLED: [[IF_THEN2_LICM]]:
@@ -1272,10 +1270,10 @@ if.end:
br i1 %cmp2, label %loop.backedge, label %if.then2
; CHECK-LABEL: if.then2:
-; CHECK-DISABLED: %d = getelementptr inbounds i32, i32* %g, i64 %phi
+; CHECK-DISABLED: %d = getelementptr inbounds i32, ptr %g, i64 %phi
if.then2:
- %d = getelementptr inbounds i32, i32* %g, i64 %phi
- store i32 1, i32* %d, align 4
+ %d = getelementptr inbounds i32, ptr %g, i64 %phi
+ store i32 1, ptr %d, align 4
br label %loop.backedge
loop.backedge:
@@ -1284,7 +1282,7 @@ loop.backedge:
; As above, but we have two such phis
; CHECK-LABEL: @phi_conditional_use_twice
-define i64 @phi_conditional_use_twice(i32 %f, i32* %g) {
+define i64 @phi_conditional_use_twice(i32 %f, ptr %g) {
; CHECK-LABEL: entry:
; CHECK: %cmp1 = icmp eq i32 %f, 1
; CHECK: %cmp2 = icmp eq i32 %f, 0
@@ -1300,7 +1298,7 @@ entry:
; CHECK-ENABLED: [[IF_END_LICM]]:
; CHECK-ENABLED: %phi1 = phi i64 [ 0, %entry ], [ 1, %[[IF_THEN_LICM]] ]
-; CHECK-ENABLED: %d = getelementptr inbounds i32, i32* %g, i64 %phi1
+; CHECK-ENABLED: %d = getelementptr inbounds i32, ptr %g, i64 %phi1
; CHECK-ENABLED: i1 %cmp2, label %[[IF_END2_LICM:.*]], label %[[IF_THEN2_LICM:.*]]
; CHECK-ENABLED: [[IF_THEN2_LICM]]:
@@ -1308,7 +1306,7 @@ entry:
; CHECK-ENABLED: [[IF_END2_LICM]]:
; CHECK-ENABLED: %phi2 = phi i64 [ 2, %[[IF_END_LICM]] ], [ 3, %[[IF_THEN2_LICM]] ]
-; CHECK-ENABLED: %e = getelementptr inbounds i32, i32* %g, i64 %phi2
+; CHECK-ENABLED: %e = getelementptr inbounds i32, ptr %g, i64 %phi2
; CHECK-ENABLED: i1 %cmp3, label %[[LOOP_BACKEDGE_LICM:.*]], label %[[IF_THEN3_LICM:.*]]
; CHECK-ENABLED: [[IF_THEN3_LICM]]:
@@ -1330,10 +1328,10 @@ if.end:
br i1 %cmp2, label %if.end2, label %if.then2
; CHECK-LABEL: if.then2:
-; CHECK-DISABLED: %d = getelementptr inbounds i32, i32* %g, i64 %phi1
+; CHECK-DISABLED: %d = getelementptr inbounds i32, ptr %g, i64 %phi1
if.then2:
- %d = getelementptr inbounds i32, i32* %g, i64 %phi1
- store i32 1, i32* %d, align 4
+ %d = getelementptr inbounds i32, ptr %g, i64 %phi1
+ store i32 1, ptr %d, align 4
br label %if.end2
; CHECK-LABEL: if.end2:
@@ -1343,10 +1341,10 @@ if.end2:
br i1 %cmp3, label %loop.backedge, label %if.then3
; CHECK-LABEL: if.then3:
-; CHECK-DISABLED: %e = getelementptr inbounds i32, i32* %g, i64 %phi2
+; CHECK-DISABLED: %e = getelementptr inbounds i32, ptr %g, i64 %phi2
if.then3:
- %e = getelementptr inbounds i32, i32* %g, i64 %phi2
- store i32 1, i32* %e, align 4
+ %e = getelementptr inbounds i32, ptr %g, i64 %phi2
+ store i32 1, ptr %e, align 4
br label %loop.backedge
loop.backedge:
@@ -1356,11 +1354,11 @@ loop.backedge:
; The order that we hoist instructions from the loop is
diff erent to the textual
; order in the function. Check that we can rehoist this correctly.
; CHECK-LABEL: @rehoist_wrong_order_1
-define void @rehoist_wrong_order_1(i32* %ptr) {
+define void @rehoist_wrong_order_1(ptr %ptr) {
; CHECK-LABEL: entry
-; CHECK-DAG: %gep2 = getelementptr inbounds i32, i32* %ptr, i64 2
-; CHECK-DAG: %gep3 = getelementptr inbounds i32, i32* %ptr, i64 3
-; CHECK-DAG: %gep1 = getelementptr inbounds i32, i32* %ptr, i64 1
+; CHECK-DAG: %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
+; CHECK-DAG: %gep3 = getelementptr inbounds i32, ptr %ptr, i64 3
+; CHECK-DAG: %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
; CHECK-ENABLED: br i1 undef, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
entry:
br label %loop
@@ -1384,21 +1382,21 @@ loop:
br i1 undef, label %if1, label %else1
if1:
- %gep1 = getelementptr inbounds i32, i32* %ptr, i64 1
- store i32 0, i32* %gep1, align 4
+ %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
+ store i32 0, ptr %gep1, align 4
br label %loop.backedge
else1:
- %gep2 = getelementptr inbounds i32, i32* %ptr, i64 2
- store i32 0, i32* %gep2, align 4
+ %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
+ store i32 0, ptr %gep2, align 4
br i1 undef, label %if2, label %loop.backedge
if2:
br i1 undef, label %if3, label %end
if3:
- %gep3 = getelementptr inbounds i32, i32* %ptr, i64 3
- store i32 0, i32* %gep3, align 4
+ %gep3 = getelementptr inbounds i32, ptr %ptr, i64 3
+ store i32 0, ptr %gep3, align 4
br label %end
end:
@@ -1410,11 +1408,11 @@ loop.backedge:
}
; CHECK-LABEL: @rehoist_wrong_order_2
-define void @rehoist_wrong_order_2(i32* %ptr) {
+define void @rehoist_wrong_order_2(ptr %ptr) {
; CHECK-LABEL: entry
-; CHECK-DAG: %gep2 = getelementptr inbounds i32, i32* %ptr, i64 2
-; CHECK-DAG: %gep3 = getelementptr inbounds i32, i32* %gep2, i64 3
-; CHECK-DAG: %gep1 = getelementptr inbounds i32, i32* %ptr, i64 1
+; CHECK-DAG: %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
+; CHECK-DAG: %gep3 = getelementptr inbounds i32, ptr %gep2, i64 3
+; CHECK-DAG: %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
; CHECK-ENABLED: br i1 undef, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
entry:
br label %loop
@@ -1438,21 +1436,21 @@ loop:
br i1 undef, label %if1, label %else1
if1:
- %gep1 = getelementptr inbounds i32, i32* %ptr, i64 1
- store i32 0, i32* %gep1, align 4
+ %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
+ store i32 0, ptr %gep1, align 4
br label %loop.backedge
else1:
- %gep2 = getelementptr inbounds i32, i32* %ptr, i64 2
- store i32 0, i32* %gep2, align 4
+ %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
+ store i32 0, ptr %gep2, align 4
br i1 undef, label %if2, label %loop.backedge
if2:
br i1 undef, label %if3, label %end
if3:
- %gep3 = getelementptr inbounds i32, i32* %gep2, i64 3
- store i32 0, i32* %gep3, align 4
+ %gep3 = getelementptr inbounds i32, ptr %gep2, i64 3
+ store i32 0, ptr %gep3, align 4
br label %end
end:
@@ -1463,10 +1461,10 @@ loop.backedge:
}
; CHECK-LABEL: @rehoist_wrong_order_3
-define void @rehoist_wrong_order_3(i32* %ptr) {
+define void @rehoist_wrong_order_3(ptr %ptr) {
; CHECK-LABEL: entry
-; CHECK-DAG: %gep2 = getelementptr inbounds i32, i32* %ptr, i64 2
-; CHECK-DAG: %gep1 = getelementptr inbounds i32, i32* %ptr, i64 1
+; CHECK-DAG: %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
+; CHECK-DAG: %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
; CHECK-ENABLED: br i1 undef, label %[[IF1_LICM:.*]], label %[[ELSE1_LICM:.*]]
entry:
br label %loop
@@ -1478,8 +1476,8 @@ entry:
; CHECK-ENABLED: br label %[[IF2_LICM]]
; CHECK-ENABLED: [[IF2_LICM]]:
-; CHECK-ENABLED: %phi = phi i32* [ %gep1, %[[IF1_LICM]] ], [ %gep2, %[[ELSE1_LICM]] ]
-; CHECK-ENABLED: %gep3 = getelementptr inbounds i32, i32* %phi, i64 3
+; CHECK-ENABLED: %phi = phi ptr [ %gep1, %[[IF1_LICM]] ], [ %gep2, %[[ELSE1_LICM]] ]
+; CHECK-ENABLED: %gep3 = getelementptr inbounds i32, ptr %phi, i64 3
; CHECK-ENABLED: br i1 undef, label %[[IF3_LICM:.*]], label %[[END_LICM:.*]]
; CHECK-ENABLED: [[IF3_LICM]]:
@@ -1492,22 +1490,22 @@ loop:
br i1 undef, label %if1, label %else1
if1:
- %gep1 = getelementptr inbounds i32, i32* %ptr, i64 1
- store i32 0, i32* %gep1, align 4
+ %gep1 = getelementptr inbounds i32, ptr %ptr, i64 1
+ store i32 0, ptr %gep1, align 4
br label %if2
else1:
- %gep2 = getelementptr inbounds i32, i32* %ptr, i64 2
- store i32 0, i32* %gep2, align 4
+ %gep2 = getelementptr inbounds i32, ptr %ptr, i64 2
+ store i32 0, ptr %gep2, align 4
br i1 undef, label %if2, label %loop.backedge
if2:
- %phi = phi i32* [ %gep1, %if1 ], [ %gep2, %else1 ]
+ %phi = phi ptr [ %gep1, %if1 ], [ %gep2, %else1 ]
br i1 undef, label %if3, label %end
if3:
- %gep3 = getelementptr inbounds i32, i32* %phi, i64 3
- store i32 0, i32* %gep3, align 4
+ %gep3 = getelementptr inbounds i32, ptr %phi, i64 3
+ store i32 0, ptr %gep3, align 4
br label %end
end:
diff --git a/llvm/test/Transforms/LICM/hoisting-preheader-debugloc.ll b/llvm/test/Transforms/LICM/hoisting-preheader-debugloc.ll
index 67abe66a7d6aa..570f4230c1a90 100644
--- a/llvm/test/Transforms/LICM/hoisting-preheader-debugloc.ll
+++ b/llvm/test/Transforms/LICM/hoisting-preheader-debugloc.ll
@@ -1,6 +1,6 @@
; RUN: opt -passes=licm %s -S | FileCheck %s
-; CHECK: %arrayidx4.promoted = load i32, i32* %arrayidx4, align 4, !tbaa !{{[0-9]+$}}
+; CHECK: %arrayidx4.promoted = load i32, ptr %arrayidx4, align 4, !tbaa !{{[0-9]+$}}
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
@@ -15,11 +15,10 @@ declare i16 @e(i32)
define i16 @g() !dbg !13 {
entry:
%l_284 = alloca [2 x [3 x [6 x i32]]], align 16
- %0 = bitcast [2 x [3 x [6 x i32]]]* %l_284 to i8*, !dbg !24
- call void @llvm.lifetime.start.p0i8(i64 144, i8* nonnull %0), !dbg !24
- call void @llvm.dbg.declare(metadata [2 x [3 x [6 x i32]]]* %l_284, metadata !17, metadata !DIExpression()), !dbg !25
- %1 = load i16, i16* @a, align 2, !dbg !26, !tbaa !29
- %cmp11 = icmp sgt i16 %1, -1, !dbg !33
+ call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %l_284), !dbg !24
+ call void @llvm.dbg.declare(metadata ptr %l_284, metadata !17, metadata !DIExpression()), !dbg !25
+ %0 = load i16, ptr @a, align 2, !dbg !26, !tbaa !29
+ %cmp11 = icmp sgt i16 %0, -1, !dbg !33
br i1 %cmp11, label %for.body.lr.ph, label %cleanup, !dbg !34
for.body.lr.ph: ; preds = %entry
@@ -31,16 +30,16 @@ for.body: ; preds = %for.cond2, %for.bod
br i1 %tobool, label %for.cond2, label %for.body.cleanup_crit_edge, !dbg !38
for.cond2: ; preds = %for.body
- %arrayidx4 = getelementptr inbounds [2 x [3 x [6 x i32]]], [2 x [3 x [6 x i32]]]* %l_284, i64 0, i64 1, i64 2, i64 5, !dbg !39
- %l = load i32, i32* %arrayidx4, !dbg !43, !tbaa !44
+ %arrayidx4 = getelementptr inbounds [2 x [3 x [6 x i32]]], ptr %l_284, i64 0, i64 1, i64 2, i64 5, !dbg !39
+ %l = load i32, ptr %arrayidx4, !dbg !43, !tbaa !44
%add = add i32 %l, 1, !dbg !43
- store i32 %add, i32* %arrayidx4, align 4, !dbg !43, !tbaa !44
- %arrayidx8 = getelementptr inbounds [2 x [3 x [6 x i32]]], [2 x [3 x [6 x i32]]]* %l_284, i64 0, i64 1, i64 1, i64 4, !dbg !46
- %2 = load i32, i32* %arrayidx8, align 8, !dbg !46, !tbaa !44
- %conv9 = trunc i32 %2 to i16, !dbg !46
- store i16 %conv9, i16* @b, align 2, !dbg !47, !tbaa !29
- %3 = load i16, i16* @a, align 2, !dbg !26, !tbaa !29
- %cmp = icmp sgt i16 %3, -1, !dbg !33
+ store i32 %add, ptr %arrayidx4, align 4, !dbg !43, !tbaa !44
+ %arrayidx8 = getelementptr inbounds [2 x [3 x [6 x i32]]], ptr %l_284, i64 0, i64 1, i64 1, i64 4, !dbg !46
+ %1 = load i32, ptr %arrayidx8, align 8, !dbg !46, !tbaa !44
+ %conv9 = trunc i32 %1 to i16, !dbg !46
+ store i16 %conv9, ptr @b, align 2, !dbg !47, !tbaa !29
+ %2 = load i16, ptr @a, align 2, !dbg !26, !tbaa !29
+ %cmp = icmp sgt i16 %2, -1, !dbg !33
br i1 %cmp, label %for.body, label %for.cond.cleanup_crit_edge, !dbg !34, !llvm.loop !48
for.cond.cleanup_crit_edge: ; preds = %for.cond2
@@ -50,15 +49,15 @@ for.body.cleanup_crit_edge: ; preds = %for.body
br label %cleanup, !dbg !38
cleanup: ; preds = %for.body.cleanup_crit_edge, %for.cond.cleanup_crit_edge, %entry
- call void @llvm.lifetime.end.p0i8(i64 144, i8* nonnull %0), !dbg !51
+ call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %l_284), !dbg !51
ret i16 1, !dbg !51
}
; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
-declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #1
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1
; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
-declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #1
+declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1
; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.value(metadata, metadata, metadata) #0
diff --git a/llvm/test/Transforms/LICM/hoisting.ll b/llvm/test/Transforms/LICM/hoisting.ll
index 1080f2a3ac4f2..6001c52d885e1 100644
--- a/llvm/test/Transforms/LICM/hoisting.ll
+++ b/llvm/test/Transforms/LICM/hoisting.ll
@@ -1,7 +1,7 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -aa-pipeline=basic-aa -passes='loop-mssa(licm)' -S | FileCheck %s
- at X = global i32 0 ; <i32*> [#uses=1]
+ at X = global i32 0 ; <ptr> [#uses=1]
declare void @foo()
@@ -11,7 +11,7 @@ declare i32 @llvm.bitreverse.i32(i32)
; potentially trapping instructions when they are not guaranteed to execute.
define i32 @test1(i1 %c) {
; CHECK-LABEL: @test1(
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* @X, align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr @X, align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: call void @foo()
@@ -27,7 +27,7 @@ define i32 @test1(i1 %c) {
; CHECK-NEXT: [[C:%.*]] = sub i32 [[A]], [[B_LCSSA]]
; CHECK-NEXT: ret i32 [[C]]
;
- %A = load i32, i32* @X ; <i32> [#uses=2]
+ %A = load i32, ptr @X ; <i32> [#uses=2]
br label %Loop
Loop: ; preds = %LoopTail, %0
call void @foo( )
@@ -52,7 +52,7 @@ declare void @foo2(i32) nounwind
;; It is ok and desirable to hoist this potentially trapping instruction.
define i32 @test2(i1 %c) {
; CHECK-LABEL: @test2(
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* @X, align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr @X, align 4
; CHECK-NEXT: [[B:%.*]] = sdiv i32 4, [[A]]
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
@@ -65,7 +65,7 @@ define i32 @test2(i1 %c) {
; CHECK-NEXT: [[C:%.*]] = sub i32 [[A]], [[B_LCSSA]]
; CHECK-NEXT: ret i32 [[C]]
;
- %A = load i32, i32* @X
+ %A = load i32, ptr @X
br label %Loop
Loop:
@@ -86,7 +86,7 @@ Out:
; This loop invariant instruction should be constant folded, not hoisted.
define i32 @test3(i1 %c) {
; CHECK-LABEL: @test3(
-; CHECK-NEXT: [[A:%.*]] = load i32, i32* @X, align 4
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr @X, align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: call void @foo2(i32 6)
@@ -96,7 +96,7 @@ define i32 @test3(i1 %c) {
; CHECK-NEXT: [[C:%.*]] = sub i32 [[A]], [[B_LCSSA]]
; CHECK-NEXT: ret i32 [[C]]
;
- %A = load i32, i32* @X ; <i32> [#uses=2]
+ %A = load i32, ptr @X ; <i32> [#uses=2]
br label %Loop
Loop:
%B = add i32 4, 2 ; <i32> [#uses=2]
@@ -145,10 +145,10 @@ for.end: ; preds = %for.body
declare void @foo_may_call_exit(i32)
; PR14854
-define { i32*, i32 } @test5(i32 %i, { i32*, i32 } %e) {
+define { ptr, i32 } @test5(i32 %i, { ptr, i32 } %e) {
; CHECK-LABEL: @test5(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[OUT:%.*]] = extractvalue { i32*, i32 } [[E:%.*]], 1
+; CHECK-NEXT: [[OUT:%.*]] = extractvalue { ptr, i32 } [[E:%.*]], 1
; CHECK-NEXT: br label [[TAILRECURSE:%.*]]
; CHECK: tailrecurse:
; CHECK-NEXT: [[I_TR:%.*]] = phi i32 [ [[I:%.*]], [[ENTRY:%.*]] ], [ [[CMP2:%.*]], [[THEN:%.*]] ]
@@ -159,16 +159,16 @@ define { i32*, i32 } @test5(i32 %i, { i32*, i32 } %e) {
; CHECK-NEXT: [[CMP2]] = add i32 [[I_TR]], 1
; CHECK-NEXT: br label [[TAILRECURSE]]
; CHECK: ifend:
-; CHECK-NEXT: [[D_LE:%.*]] = insertvalue { i32*, i32 } [[E]], i32* null, 0
-; CHECK-NEXT: ret { i32*, i32 } [[D_LE]]
+; CHECK-NEXT: [[D_LE:%.*]] = insertvalue { ptr, i32 } [[E]], ptr null, 0
+; CHECK-NEXT: ret { ptr, i32 } [[D_LE]]
;
entry:
br label %tailrecurse
tailrecurse: ; preds = %then, %entry
%i.tr = phi i32 [ %i, %entry ], [ %cmp2, %then ]
- %out = extractvalue { i32*, i32 } %e, 1
- %d = insertvalue { i32*, i32 } %e, i32* null, 0
+ %out = extractvalue { ptr, i32 } %e, 1
+ %d = insertvalue { ptr, i32 } %e, ptr null, 0
%cmp1 = icmp sgt i32 %out, %i.tr
br i1 %cmp1, label %then, label %ifend
@@ -178,7 +178,7 @@ then: ; preds = %tailrecurse
br label %tailrecurse
ifend: ; preds = %tailrecurse
- ret { i32*, i32 } %d
+ ret { ptr, i32 } %d
}
define void @test6(float %f) #2 {
@@ -259,7 +259,7 @@ define i32 @test_volatile(i1 %c) {
; CHECK-LABEL: @test_volatile(
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
-; CHECK-NEXT: [[A:%.*]] = load volatile i32, i32* @X, align 4
+; CHECK-NEXT: [[A:%.*]] = load volatile i32, ptr @X, align 4
; CHECK-NEXT: br i1 [[C:%.*]], label [[LOOP]], label [[OUT:%.*]]
; CHECK: Out:
; CHECK-NEXT: [[A_LCSSA:%.*]] = phi i32 [ [[A]], [[LOOP]] ]
@@ -268,7 +268,7 @@ define i32 @test_volatile(i1 %c) {
br label %Loop
Loop:
- %A = load volatile i32, i32* @X
+ %A = load volatile i32, ptr @X
br i1 %c, label %Loop, label %Out
Out:
@@ -276,25 +276,24 @@ Out:
}
-declare {}* @llvm.invariant.start.p0i8(i64, i8* nocapture) nounwind readonly
-declare void @llvm.invariant.end.p0i8({}*, i64, i8* nocapture) nounwind
-declare void @escaping.invariant.start({}*) nounwind
+declare ptr @llvm.invariant.start.p0(i64, ptr nocapture) nounwind readonly
+declare void @llvm.invariant.end.p0(ptr, i64, ptr nocapture) nounwind
+declare void @escaping.invariant.start(ptr) nounwind
; invariant.start dominates the load, and in this scope, the
; load is invariant. So, we can hoist the `addrld` load out of the loop.
-define i32 @test_fence(i8* %addr, i32 %n, i8* %volatile) {
+define i32 @test_fence(ptr %addr, i32 %n, ptr %volatile) {
; CHECK-LABEL: @test_fence(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, i8* [[ADDR:%.*]], i64 8
-; CHECK-NEXT: [[ADDR_I:%.*]] = bitcast i8* [[GEP]] to i32*
-; CHECK-NEXT: store atomic i32 5, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[ADDR:%.*]], i64 8
+; CHECK-NEXT: store atomic i32 5, ptr [[GEP]] unordered, align 8
; CHECK-NEXT: fence release
-; CHECK-NEXT: [[INVST:%.*]] = call {}* @llvm.invariant.start.p0i8(i64 4, i8* [[GEP]])
-; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[INVST:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[GEP]])
+; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, ptr [[GEP]] unordered, align 8
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ [[INDVAR_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ [[SUM_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY]] ]
-; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, i8* [[VOLATILE:%.*]] unordered, align 8
+; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, ptr [[VOLATILE:%.*]] unordered, align 8
; CHECK-NEXT: fence acquire
; CHECK-NEXT: [[VOLCHK:%.*]] = icmp eq i8 [[VOLLOAD]], 0
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[VOLCHK]], i32 0, i32 [[ADDRLD]]
@@ -307,20 +306,19 @@ define i32 @test_fence(i8* %addr, i32 %n, i8* %volatile) {
; CHECK-NEXT: ret i32 [[SUM_LCSSA]]
;
entry:
- %gep = getelementptr inbounds i8, i8* %addr, i64 8
- %addr.i = bitcast i8* %gep to i32 *
- store atomic i32 5, i32 * %addr.i unordered, align 8
+ %gep = getelementptr inbounds i8, ptr %addr, i64 8
+ store atomic i32 5, ptr %gep unordered, align 8
fence release
- %invst = call {}* @llvm.invariant.start.p0i8(i64 4, i8* %gep)
+ %invst = call ptr @llvm.invariant.start.p0(i64 4, ptr %gep)
br label %loop
loop:
%indvar = phi i32 [ %indvar.next, %loop ], [ 0, %entry ]
%sum = phi i32 [ %sum.next, %loop ], [ 0, %entry ]
- %volload = load atomic i8, i8* %volatile unordered, align 8
+ %volload = load atomic i8, ptr %volatile unordered, align 8
fence acquire
%volchk = icmp eq i8 %volload, 0
- %addrld = load atomic i32, i32* %addr.i unordered, align 8
+ %addrld = load atomic i32, ptr %gep unordered, align 8
%sel = select i1 %volchk, i32 0, i32 %addrld
%sum.next = add i32 %sel, %sum
%indvar.next = add i32 %indvar, 1
@@ -335,23 +333,22 @@ loopexit:
; Same as test above, but the load is no longer invariant (presence of
; invariant.end). We cannot hoist the addrld out of loop.
-define i32 @test_fence1(i8* %addr, i32 %n, i8* %volatile) {
+define i32 @test_fence1(ptr %addr, i32 %n, ptr %volatile) {
; CHECK-LABEL: @test_fence1(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, i8* [[ADDR:%.*]], i64 8
-; CHECK-NEXT: [[ADDR_I:%.*]] = bitcast i8* [[GEP]] to i32*
-; CHECK-NEXT: store atomic i32 5, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[ADDR:%.*]], i64 8
+; CHECK-NEXT: store atomic i32 5, ptr [[GEP]] unordered, align 8
; CHECK-NEXT: fence release
-; CHECK-NEXT: [[INVST:%.*]] = call {}* @llvm.invariant.start.p0i8(i64 4, i8* [[GEP]])
-; CHECK-NEXT: call void @llvm.invariant.end.p0i8({}* [[INVST]], i64 4, i8* [[GEP]])
+; CHECK-NEXT: [[INVST:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[GEP]])
+; CHECK-NEXT: call void @llvm.invariant.end.p0(ptr [[INVST]], i64 4, ptr [[GEP]])
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ [[INDVAR_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ [[SUM_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY]] ]
-; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, i8* [[VOLATILE:%.*]] unordered, align 8
+; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, ptr [[VOLATILE:%.*]] unordered, align 8
; CHECK-NEXT: fence acquire
; CHECK-NEXT: [[VOLCHK:%.*]] = icmp eq i8 [[VOLLOAD]], 0
-; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, ptr [[GEP]] unordered, align 8
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[VOLCHK]], i32 0, i32 [[ADDRLD]]
; CHECK-NEXT: [[SUM_NEXT]] = add i32 [[SEL]], [[SUM]]
; CHECK-NEXT: [[INDVAR_NEXT]] = add i32 [[INDVAR]], 1
@@ -362,21 +359,20 @@ define i32 @test_fence1(i8* %addr, i32 %n, i8* %volatile) {
; CHECK-NEXT: ret i32 [[SUM_LCSSA]]
;
entry:
- %gep = getelementptr inbounds i8, i8* %addr, i64 8
- %addr.i = bitcast i8* %gep to i32 *
- store atomic i32 5, i32 * %addr.i unordered, align 8
+ %gep = getelementptr inbounds i8, ptr %addr, i64 8
+ store atomic i32 5, ptr %gep unordered, align 8
fence release
- %invst = call {}* @llvm.invariant.start.p0i8(i64 4, i8* %gep)
- call void @llvm.invariant.end.p0i8({}* %invst, i64 4, i8* %gep)
+ %invst = call ptr @llvm.invariant.start.p0(i64 4, ptr %gep)
+ call void @llvm.invariant.end.p0(ptr %invst, i64 4, ptr %gep)
br label %loop
loop:
%indvar = phi i32 [ %indvar.next, %loop ], [ 0, %entry ]
%sum = phi i32 [ %sum.next, %loop ], [ 0, %entry ]
- %volload = load atomic i8, i8* %volatile unordered, align 8
+ %volload = load atomic i8, ptr %volatile unordered, align 8
fence acquire
%volchk = icmp eq i8 %volload, 0
- %addrld = load atomic i32, i32* %addr.i unordered, align 8
+ %addrld = load atomic i32, ptr %gep unordered, align 8
%sel = select i1 %volchk, i32 0, i32 %addrld
%sum.next = add i32 %sel, %sum
%indvar.next = add i32 %indvar, 1
@@ -389,23 +385,22 @@ loopexit:
; same as test above, but instead of invariant.end, we have the result of
; invariant.start escaping through a call. We cannot hoist the load.
-define i32 @test_fence2(i8* %addr, i32 %n, i8* %volatile) {
+define i32 @test_fence2(ptr %addr, i32 %n, ptr %volatile) {
; CHECK-LABEL: @test_fence2(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, i8* [[ADDR:%.*]], i64 8
-; CHECK-NEXT: [[ADDR_I:%.*]] = bitcast i8* [[GEP]] to i32*
-; CHECK-NEXT: store atomic i32 5, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[ADDR:%.*]], i64 8
+; CHECK-NEXT: store atomic i32 5, ptr [[GEP]] unordered, align 8
; CHECK-NEXT: fence release
-; CHECK-NEXT: [[INVST:%.*]] = call {}* @llvm.invariant.start.p0i8(i64 4, i8* [[GEP]])
-; CHECK-NEXT: call void @escaping.invariant.start({}* [[INVST]])
+; CHECK-NEXT: [[INVST:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[GEP]])
+; CHECK-NEXT: call void @escaping.invariant.start(ptr [[INVST]])
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ [[INDVAR_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ [[SUM_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY]] ]
-; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, i8* [[VOLATILE:%.*]] unordered, align 8
+; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, ptr [[VOLATILE:%.*]] unordered, align 8
; CHECK-NEXT: fence acquire
; CHECK-NEXT: [[VOLCHK:%.*]] = icmp eq i8 [[VOLLOAD]], 0
-; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, ptr [[GEP]] unordered, align 8
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[VOLCHK]], i32 0, i32 [[ADDRLD]]
; CHECK-NEXT: [[SUM_NEXT]] = add i32 [[SEL]], [[SUM]]
; CHECK-NEXT: [[INDVAR_NEXT]] = add i32 [[INDVAR]], 1
@@ -416,21 +411,20 @@ define i32 @test_fence2(i8* %addr, i32 %n, i8* %volatile) {
; CHECK-NEXT: ret i32 [[SUM_LCSSA]]
;
entry:
- %gep = getelementptr inbounds i8, i8* %addr, i64 8
- %addr.i = bitcast i8* %gep to i32 *
- store atomic i32 5, i32 * %addr.i unordered, align 8
+ %gep = getelementptr inbounds i8, ptr %addr, i64 8
+ store atomic i32 5, ptr %gep unordered, align 8
fence release
- %invst = call {}* @llvm.invariant.start.p0i8(i64 4, i8* %gep)
- call void @escaping.invariant.start({}* %invst)
+ %invst = call ptr @llvm.invariant.start.p0(i64 4, ptr %gep)
+ call void @escaping.invariant.start(ptr %invst)
br label %loop
loop:
%indvar = phi i32 [ %indvar.next, %loop ], [ 0, %entry ]
%sum = phi i32 [ %sum.next, %loop ], [ 0, %entry ]
- %volload = load atomic i8, i8* %volatile unordered, align 8
+ %volload = load atomic i8, ptr %volatile unordered, align 8
fence acquire
%volchk = icmp eq i8 %volload, 0
- %addrld = load atomic i32, i32* %addr.i unordered, align 8
+ %addrld = load atomic i32, ptr %gep unordered, align 8
%sel = select i1 %volchk, i32 0, i32 %addrld
%sum.next = add i32 %sel, %sum
%indvar.next = add i32 %indvar, 1
@@ -441,26 +435,23 @@ loopexit:
ret i32 %sum
}
-; FIXME: invariant.start dominates the load, and in this scope, the
-; load is invariant. So, we can hoist the `addrld` load out of the loop.
; Consider the loadoperand addr.i bitcasted before being passed to
; invariant.start
-define i32 @test_fence3(i32* %addr, i32 %n, i8* %volatile) {
+define i32 @test_fence3(ptr %addr, i32 %n, ptr %volatile) {
; CHECK-LABEL: @test_fence3(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[ADDR_I:%.*]] = getelementptr inbounds i32, i32* [[ADDR:%.*]], i64 8
-; CHECK-NEXT: [[GEP:%.*]] = bitcast i32* [[ADDR_I]] to i8*
-; CHECK-NEXT: store atomic i32 5, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[ADDR_I:%.*]] = getelementptr inbounds i32, ptr [[ADDR:%.*]], i64 8
+; CHECK-NEXT: store atomic i32 5, ptr [[ADDR_I]] unordered, align 8
; CHECK-NEXT: fence release
-; CHECK-NEXT: [[INVST:%.*]] = call {}* @llvm.invariant.start.p0i8(i64 4, i8* [[GEP]])
+; CHECK-NEXT: [[INVST:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[ADDR_I]])
+; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, ptr [[ADDR_I]] unordered, align 8
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ [[INDVAR_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ [[SUM_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY]] ]
-; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, i8* [[VOLATILE:%.*]] unordered, align 8
+; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, ptr [[VOLATILE:%.*]] unordered, align 8
; CHECK-NEXT: fence acquire
; CHECK-NEXT: [[VOLCHK:%.*]] = icmp eq i8 [[VOLLOAD]], 0
-; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, i32* [[ADDR_I]] unordered, align 8
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[VOLCHK]], i32 0, i32 [[ADDRLD]]
; CHECK-NEXT: [[SUM_NEXT]] = add i32 [[SEL]], [[SUM]]
; CHECK-NEXT: [[INDVAR_NEXT]] = add i32 [[INDVAR]], 1
@@ -471,20 +462,19 @@ define i32 @test_fence3(i32* %addr, i32 %n, i8* %volatile) {
; CHECK-NEXT: ret i32 [[SUM_LCSSA]]
;
entry:
- %addr.i = getelementptr inbounds i32, i32* %addr, i64 8
- %gep = bitcast i32* %addr.i to i8 *
- store atomic i32 5, i32 * %addr.i unordered, align 8
+ %addr.i = getelementptr inbounds i32, ptr %addr, i64 8
+ store atomic i32 5, ptr %addr.i unordered, align 8
fence release
- %invst = call {}* @llvm.invariant.start.p0i8(i64 4, i8* %gep)
+ %invst = call ptr @llvm.invariant.start.p0(i64 4, ptr %addr.i)
br label %loop
loop:
%indvar = phi i32 [ %indvar.next, %loop ], [ 0, %entry ]
%sum = phi i32 [ %sum.next, %loop ], [ 0, %entry ]
- %volload = load atomic i8, i8* %volatile unordered, align 8
+ %volload = load atomic i8, ptr %volatile unordered, align 8
fence acquire
%volchk = icmp eq i8 %volload, 0
- %addrld = load atomic i32, i32* %addr.i unordered, align 8
+ %addrld = load atomic i32, ptr %addr.i unordered, align 8
%sel = select i1 %volchk, i32 0, i32 %addrld
%sum.next = add i32 %sel, %sum
%indvar.next = add i32 %indvar, 1
@@ -496,22 +486,21 @@ loopexit:
}
; We should not hoist the addrld out of the loop.
-define i32 @test_fence4(i32* %addr, i32 %n, i8* %volatile) {
+define i32 @test_fence4(ptr %addr, i32 %n, ptr %volatile) {
; CHECK-LABEL: @test_fence4(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[ADDR_I:%.*]] = getelementptr inbounds i32, i32* [[ADDR:%.*]], i64 8
-; CHECK-NEXT: [[GEP:%.*]] = bitcast i32* [[ADDR_I]] to i8*
+; CHECK-NEXT: [[ADDR_I:%.*]] = getelementptr inbounds i32, ptr [[ADDR:%.*]], i64 8
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ [[INDVAR_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ [[SUM_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY]] ]
-; CHECK-NEXT: store atomic i32 5, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: store atomic i32 5, ptr [[ADDR_I]] unordered, align 8
; CHECK-NEXT: fence release
-; CHECK-NEXT: [[INVST:%.*]] = call {}* @llvm.invariant.start.p0i8(i64 4, i8* [[GEP]])
-; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, i8* [[VOLATILE:%.*]] unordered, align 8
+; CHECK-NEXT: [[INVST:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[ADDR_I]])
+; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, ptr [[VOLATILE:%.*]] unordered, align 8
; CHECK-NEXT: fence acquire
; CHECK-NEXT: [[VOLCHK:%.*]] = icmp eq i8 [[VOLLOAD]], 0
-; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, ptr [[ADDR_I]] unordered, align 8
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[VOLCHK]], i32 0, i32 [[ADDRLD]]
; CHECK-NEXT: [[SUM_NEXT]] = add i32 [[SEL]], [[SUM]]
; CHECK-NEXT: [[INDVAR_NEXT]] = add i32 [[INDVAR]], 1
@@ -522,20 +511,19 @@ define i32 @test_fence4(i32* %addr, i32 %n, i8* %volatile) {
; CHECK-NEXT: ret i32 [[SUM_LCSSA]]
;
entry:
- %addr.i = getelementptr inbounds i32, i32* %addr, i64 8
- %gep = bitcast i32* %addr.i to i8 *
+ %addr.i = getelementptr inbounds i32, ptr %addr, i64 8
br label %loop
loop:
%indvar = phi i32 [ %indvar.next, %loop ], [ 0, %entry ]
%sum = phi i32 [ %sum.next, %loop ], [ 0, %entry ]
- store atomic i32 5, i32 * %addr.i unordered, align 8
+ store atomic i32 5, ptr %addr.i unordered, align 8
fence release
- %invst = call {}* @llvm.invariant.start.p0i8(i64 4, i8* %gep)
- %volload = load atomic i8, i8* %volatile unordered, align 8
+ %invst = call ptr @llvm.invariant.start.p0(i64 4, ptr %addr.i)
+ %volload = load atomic i8, ptr %volatile unordered, align 8
fence acquire
%volchk = icmp eq i8 %volload, 0
- %addrld = load atomic i32, i32* %addr.i unordered, align 8
+ %addrld = load atomic i32, ptr %addr.i unordered, align 8
%sel = select i1 %volchk, i32 0, i32 %addrld
%sum.next = add i32 %sel, %sum
%indvar.next = add i32 %indvar, 1
@@ -548,22 +536,21 @@ loopexit:
; We can't hoist the invariant load out of the loop because
; the marker is given a variable size (-1).
-define i32 @test_fence5(i8* %addr, i32 %n, i8* %volatile) {
+define i32 @test_fence5(ptr %addr, i32 %n, ptr %volatile) {
; CHECK-LABEL: @test_fence5(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, i8* [[ADDR:%.*]], i64 8
-; CHECK-NEXT: [[ADDR_I:%.*]] = bitcast i8* [[GEP]] to i32*
-; CHECK-NEXT: store atomic i32 5, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i8, ptr [[ADDR:%.*]], i64 8
+; CHECK-NEXT: store atomic i32 5, ptr [[GEP]] unordered, align 8
; CHECK-NEXT: fence release
-; CHECK-NEXT: [[INVST:%.*]] = call {}* @llvm.invariant.start.p0i8(i64 -1, i8* [[GEP]])
+; CHECK-NEXT: [[INVST:%.*]] = call ptr @llvm.invariant.start.p0(i64 -1, ptr [[GEP]])
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ [[INDVAR_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ]
; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ [[SUM_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY]] ]
-; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, i8* [[VOLATILE:%.*]] unordered, align 8
+; CHECK-NEXT: [[VOLLOAD:%.*]] = load atomic i8, ptr [[VOLATILE:%.*]] unordered, align 8
; CHECK-NEXT: fence acquire
; CHECK-NEXT: [[VOLCHK:%.*]] = icmp eq i8 [[VOLLOAD]], 0
-; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, i32* [[ADDR_I]] unordered, align 8
+; CHECK-NEXT: [[ADDRLD:%.*]] = load atomic i32, ptr [[GEP]] unordered, align 8
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[VOLCHK]], i32 0, i32 [[ADDRLD]]
; CHECK-NEXT: [[SUM_NEXT]] = add i32 [[SEL]], [[SUM]]
; CHECK-NEXT: [[INDVAR_NEXT]] = add i32 [[INDVAR]], 1
@@ -574,20 +561,19 @@ define i32 @test_fence5(i8* %addr, i32 %n, i8* %volatile) {
; CHECK-NEXT: ret i32 [[SUM_LCSSA]]
;
entry:
- %gep = getelementptr inbounds i8, i8* %addr, i64 8
- %addr.i = bitcast i8* %gep to i32 *
- store atomic i32 5, i32 * %addr.i unordered, align 8
+ %gep = getelementptr inbounds i8, ptr %addr, i64 8
+ store atomic i32 5, ptr %gep unordered, align 8
fence release
- %invst = call {}* @llvm.invariant.start.p0i8(i64 -1, i8* %gep)
+ %invst = call ptr @llvm.invariant.start.p0(i64 -1, ptr %gep)
br label %loop
loop:
%indvar = phi i32 [ %indvar.next, %loop ], [ 0, %entry ]
%sum = phi i32 [ %sum.next, %loop ], [ 0, %entry ]
- %volload = load atomic i8, i8* %volatile unordered, align 8
+ %volload = load atomic i8, ptr %volatile unordered, align 8
fence acquire
%volchk = icmp eq i8 %volload, 0
- %addrld = load atomic i32, i32* %addr.i unordered, align 8
+ %addrld = load atomic i32, ptr %gep unordered, align 8
%sel = select i1 %volchk, i32 0, i32 %addrld
%sum.next = add i32 %sel, %sum
%indvar.next = add i32 %indvar, 1
@@ -606,21 +592,21 @@ declare void @g(i1)
define void @test_fence6() {
; CHECK-LABEL: @test_fence6(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[I:%.*]] = call {}* @llvm.invariant.start.p0i8(i64 1, i8* @a)
+; CHECK-NEXT: [[I:%.*]] = call ptr @llvm.invariant.start.p0(i64 1, ptr @a)
; CHECK-NEXT: br label [[F:%.*]]
; CHECK: f:
-; CHECK-NEXT: [[TMP0:%.*]] = load i8, i8* @a, align 1
+; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr @a, align 1
; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[TMP0]], 0
; CHECK-NEXT: [[T:%.*]] = icmp eq i8 [[TMP1]], 0
; CHECK-NEXT: tail call void @g(i1 [[T]])
; CHECK-NEXT: br label [[F]]
;
entry:
- %i = call {}* @llvm.invariant.start.p0i8(i64 1, i8* @a)
+ %i = call ptr @llvm.invariant.start.p0(i64 1, ptr @a)
br label %f
f:
- %0 = load i8, i8* @a
+ %0 = load i8, ptr @a
%1 = and i8 %0, 0
%t = icmp eq i8 %1, 0
tail call void @g(i1 %t)
diff --git a/llvm/test/Transforms/LICM/infinite_loops.ll b/llvm/test/Transforms/LICM/infinite_loops.ll
index df8c92b2243aa..ed826bdeaa923 100644
--- a/llvm/test/Transforms/LICM/infinite_loops.ll
+++ b/llvm/test/Transforms/LICM/infinite_loops.ll
@@ -3,7 +3,7 @@
; RUN: opt -aa-pipeline=basic-aa -passes='require<opt-remark-emit>,loop-mssa(licm)' -S %s | FileCheck %s
; Make sure we don't hoist the unsafe division to some executable block.
-define void @test_impossible_exit_in_untaken_block(i32 %a, i32 %b, i32* %p) {
+define void @test_impossible_exit_in_untaken_block(i32 %a, i32 %b, ptr %p) {
; CHECK-LABEL: @test_impossible_exit_in_untaken_block(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
@@ -12,7 +12,7 @@ define void @test_impossible_exit_in_untaken_block(i32 %a, i32 %b, i32* %p) {
; CHECK-NEXT: br i1 false, label [[NEVER_TAKEN:%.*]], label [[BACKEDGE]]
; CHECK: never_taken:
; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT: store i32 [[DIV]], i32* [[P:%.*]]
+; CHECK-NEXT: store i32 [[DIV]], ptr [[P:%.*]]
; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[EXIT:%.*]]
; CHECK: backedge:
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
@@ -29,7 +29,7 @@ loop:
never_taken:
%div = sdiv i32 %a, %b
- store i32 %div, i32* %p
+ store i32 %div, ptr %p
br i1 true, label %backedge, label %exit
backedge:
@@ -50,17 +50,17 @@ exit:
; By the moment when this test was added, it was accidentally correct due to
; reasons not directly related to this piece of logic. Make sure that it keeps
; correct in the future.
-define void @test_impossible_exit_in_untaken_block_no_ub(i32 %a, i32 %b, i32* noalias %p, i32* noalias %vp) {
+define void @test_impossible_exit_in_untaken_block_no_ub(i32 %a, i32 %b, ptr noalias %p, ptr noalias %vp) {
; CHECK-LABEL: @test_impossible_exit_in_untaken_block_no_ub(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ]
-; CHECK-NEXT: [[TMP0:%.*]] = load volatile i32, i32* [[VP:%.*]]
+; CHECK-NEXT: [[TMP0:%.*]] = load volatile i32, ptr [[VP:%.*]]
; CHECK-NEXT: br i1 false, label [[NEVER_TAKEN:%.*]], label [[BACKEDGE]]
; CHECK: never_taken:
; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT: store i32 [[DIV]], i32* [[P:%.*]]
+; CHECK-NEXT: store i32 [[DIV]], ptr [[P:%.*]]
; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[EXIT:%.*]]
; CHECK: backedge:
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
@@ -73,12 +73,12 @@ entry:
loop:
%iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
- load volatile i32, i32* %vp
+ load volatile i32, ptr %vp
br i1 false, label %never_taken, label %backedge
never_taken:
%div = sdiv i32 %a, %b
- store i32 %div, i32* %p
+ store i32 %div, ptr %p
br i1 true, label %backedge, label %exit
backedge:
@@ -92,7 +92,7 @@ exit:
; Same as above, but the volatile access is in mustexecute backedge block. The
; loop is no longer "finite by specification", make sure we don't hoist sdiv
; from it no matter how general the MustThrow analysis is.
-define void @test_impossible_exit_in_untaken_block_no_ub_2(i32 %a, i32 %b, i32* noalias %p, i32* noalias %vp) {
+define void @test_impossible_exit_in_untaken_block_no_ub_2(i32 %a, i32 %b, ptr noalias %p, ptr noalias %vp) {
; CHECK-LABEL: @test_impossible_exit_in_untaken_block_no_ub_2(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
@@ -101,11 +101,11 @@ define void @test_impossible_exit_in_untaken_block_no_ub_2(i32 %a, i32 %b, i32*
; CHECK-NEXT: br i1 false, label [[NEVER_TAKEN:%.*]], label [[BACKEDGE]]
; CHECK: never_taken:
; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT: store i32 [[DIV]], i32* [[P:%.*]]
+; CHECK-NEXT: store i32 [[DIV]], ptr [[P:%.*]]
; CHECK-NEXT: br i1 true, label [[BACKEDGE]], label [[EXIT:%.*]]
; CHECK: backedge:
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
-; CHECK-NEXT: [[TMP0:%.*]] = load volatile i32, i32* [[VP:%.*]]
+; CHECK-NEXT: [[TMP0:%.*]] = load volatile i32, ptr [[VP:%.*]]
; CHECK-NEXT: br label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -119,12 +119,12 @@ loop:
never_taken:
%div = sdiv i32 %a, %b
- store i32 %div, i32* %p
+ store i32 %div, ptr %p
br i1 true, label %backedge, label %exit
backedge:
%iv.next = add i32 %iv, 1
- load volatile i32, i32* %vp
+ load volatile i32, ptr %vp
br label %loop
exit:
diff --git a/llvm/test/Transforms/LICM/int_sideeffect.ll b/llvm/test/Transforms/LICM/int_sideeffect.ll
index 842efe56585aa..c241fee4be7ef 100644
--- a/llvm/test/Transforms/LICM/int_sideeffect.ll
+++ b/llvm/test/Transforms/LICM/int_sideeffect.ll
@@ -8,7 +8,7 @@ declare void @llvm.sideeffect()
; CHECK: load
; CHECK: loop:
; CHECK-NOT: load
-define float @licm(i64 %n, float* nocapture readonly %p) #0 {
+define float @licm(i64 %n, ptr nocapture readonly %p) #0 {
bb0:
br label %loop
@@ -16,7 +16,7 @@ loop:
%i = phi i64 [ 0, %bb0 ], [ %t5, %loop ]
%sum = phi float [ 0.000000e+00, %bb0 ], [ %t4, %loop ]
call void @llvm.sideeffect()
- %t3 = load float, float* %p
+ %t3 = load float, ptr %p
%t4 = fadd float %sum, %t3
%t5 = add i64 %i, 1
%t6 = icmp ult i64 %t5, %n
diff --git a/llvm/test/Transforms/LICM/invariant.start.ll b/llvm/test/Transforms/LICM/invariant.start.ll
index b5cfab37bebdd..53f252d2e8e94 100644
--- a/llvm/test/Transforms/LICM/invariant.start.ll
+++ b/llvm/test/Transforms/LICM/invariant.start.ll
@@ -2,11 +2,11 @@
; RUN: opt -licm -basic-aa < %s -S | FileCheck %s
; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' < %s -S | FileCheck %s
-define void @test1(i1 %cond, i32* %ptr) {
+define void @test1(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test1(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[TMP0:%.*]] = call {}* @llvm.invariant.start.p0i32(i64 4, i32* [[PTR:%.*]])
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[PTR:%.*]])
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
@@ -19,23 +19,23 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- call {}* @llvm.invariant.start.p0i32(i64 4, i32* %ptr)
- %val = load i32, i32* %ptr
+ call ptr @llvm.invariant.start.p0(i64 4, ptr %ptr)
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
;; despite the loop varying invariant.start, we should be
;; able to hoist the load
-define void @test2(i1 %cond, i32* %ptr) {
+define void @test2(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test2(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR:%.*]], align 4
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR:%.*]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
-; CHECK-NEXT: [[PIV:%.*]] = getelementptr i32, i32* [[PTR]], i32 [[X]]
-; CHECK-NEXT: [[TMP0:%.*]] = call {}* @llvm.invariant.start.p0i32(i64 4, i32* [[PIV]])
+; CHECK-NEXT: [[PIV:%.*]] = getelementptr i32, ptr [[PTR]], i32 [[X]]
+; CHECK-NEXT: [[TMP0:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[PIV]])
; CHECK-NEXT: [[X_INC]] = add i32 [[X]], [[VAL]]
; CHECK-NEXT: br label [[LOOP]]
;
@@ -44,23 +44,23 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- %piv = getelementptr i32, i32* %ptr, i32 %x
- call {}* @llvm.invariant.start.p0i32(i64 4, i32* %piv)
- %val = load i32, i32* %ptr
+ %piv = getelementptr i32, ptr %ptr, i32 %x
+ call ptr @llvm.invariant.start.p0(i64 4, ptr %piv)
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
-define void @test3(i1 %cond, i32* %ptr) {
+define void @test3(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test3(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[TMP0:%.*]] = call {}* @llvm.invariant.start.p0i32(i64 4, i32* [[PTR:%.*]])
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR]], align 4
-; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, i32* [[PTR]], i32 1
+; CHECK-NEXT: [[TMP0:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[PTR:%.*]])
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR]], align 4
+; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[PTR]], i32 1
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
-; CHECK-NEXT: store volatile i32 0, i32* [[P2]], align 4
+; CHECK-NEXT: store volatile i32 0, ptr [[P2]], align 4
; CHECK-NEXT: [[X_INC]] = add i32 [[X]], [[VAL]]
; CHECK-NEXT: br label [[LOOP]]
;
@@ -69,25 +69,25 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- call {}* @llvm.invariant.start.p0i32(i64 4, i32* %ptr)
- %val = load i32, i32* %ptr
- %p2 = getelementptr i32, i32* %ptr, i32 1
- store volatile i32 0, i32* %p2
+ call ptr @llvm.invariant.start.p0(i64 4, ptr %ptr)
+ %val = load i32, ptr %ptr
+ %p2 = getelementptr i32, ptr %ptr, i32 1
+ store volatile i32 0, ptr %p2
%x.inc = add i32 %x, %val
br label %loop
}
; can't hoist due to init in loop, only well defined if loop exits
; on first iteration, but we don't bother checking for that currently
-define void @test4(i1 %cond, i32* %ptr) {
+define void @test4(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test4(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
-; CHECK-NEXT: store i32 0, i32* [[PTR:%.*]], align 4
-; CHECK-NEXT: [[TMP0:%.*]] = call {}* @llvm.invariant.start.p0i32(i64 4, i32* [[PTR]])
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR]], align 4
+; CHECK-NEXT: store i32 0, ptr [[PTR:%.*]], align 4
+; CHECK-NEXT: [[TMP0:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[PTR]])
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR]], align 4
; CHECK-NEXT: [[X_INC]] = add i32 [[X]], [[VAL]]
; CHECK-NEXT: br label [[LOOP]]
;
@@ -96,24 +96,24 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- store i32 0, i32* %ptr
- call {}* @llvm.invariant.start.p0i32(i64 4, i32* %ptr)
- %val = load i32, i32* %ptr
+ store i32 0, ptr %ptr
+ call ptr @llvm.invariant.start.p0(i64 4, ptr %ptr)
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
; don't try to reason about scopes
-define void @test5(i1 %cond, i32* %ptr) {
+define void @test5(i1 %cond, ptr %ptr) {
; CHECK-LABEL: @test5(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[X_INC:%.*]], [[LOOP]] ]
-; CHECK-NEXT: store i32 0, i32* [[PTR:%.*]], align 4
-; CHECK-NEXT: [[SCOPE:%.*]] = call {}* @llvm.invariant.start.p0i32(i64 4, i32* [[PTR]])
-; CHECK-NEXT: [[VAL:%.*]] = load i32, i32* [[PTR]], align 4
-; CHECK-NEXT: call void @llvm.invariant.end.p0i32({}* [[SCOPE]], i64 4, i32* [[PTR]])
+; CHECK-NEXT: store i32 0, ptr [[PTR:%.*]], align 4
+; CHECK-NEXT: [[SCOPE:%.*]] = call ptr @llvm.invariant.start.p0(i64 4, ptr [[PTR]])
+; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR]], align 4
+; CHECK-NEXT: call void @llvm.invariant.end.p0(ptr [[SCOPE]], i64 4, ptr [[PTR]])
; CHECK-NEXT: [[X_INC]] = add i32 [[X]], [[VAL]]
; CHECK-NEXT: br label [[LOOP]]
;
@@ -122,13 +122,13 @@ entry:
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- store i32 0, i32* %ptr
- %scope = call {}* @llvm.invariant.start.p0i32(i64 4, i32* %ptr)
- %val = load i32, i32* %ptr
- call void @llvm.invariant.end.p0i32({}* %scope, i64 4, i32* %ptr)
+ store i32 0, ptr %ptr
+ %scope = call ptr @llvm.invariant.start.p0(i64 4, ptr %ptr)
+ %val = load i32, ptr %ptr
+ call void @llvm.invariant.end.p0(ptr %scope, i64 4, ptr %ptr)
%x.inc = add i32 %x, %val
br label %loop
}
-declare {}* @llvm.invariant.start.p0i32(i64, i32*)
-declare void @llvm.invariant.end.p0i32({}*, i64, i32*)
+declare ptr @llvm.invariant.start.p0(i64, ptr)
+declare void @llvm.invariant.end.p0(ptr, i64, ptr)
diff --git a/llvm/test/Transforms/LICM/lcssa-ssa-promoter.ll b/llvm/test/Transforms/LICM/lcssa-ssa-promoter.ll
index 427d760c21891..e25680a57aa05 100644
--- a/llvm/test/Transforms/LICM/lcssa-ssa-promoter.ll
+++ b/llvm/test/Transforms/LICM/lcssa-ssa-promoter.ll
@@ -22,7 +22,7 @@ outer.preheader:
; CHECK: br label %outer.header
outer.header:
- store i32 0, i32* @x, align 4
+ store i32 0, ptr @x, align 4
br i1 undef, label %outer.latch, label %inner.preheader
; CHECK: outer.header:
; CHECK-NEXT: br i1 undef, label %outer.latch, label %inner.preheader
@@ -39,13 +39,13 @@ inner.header:
; CHECK-NEXT: br i1 undef, label %inner.body.rhs, label %inner.latch
inner.body.rhs:
- store i32 0, i32* @x, align 4
+ store i32 0, ptr @x, align 4
br label %inner.latch
; CHECK: inner.body.rhs:
; CHECK-NEXT: br label %inner.latch
inner.latch:
- %y_val = load i32, i32* @y, align 4
+ %y_val = load i32, ptr @y, align 4
%icmp = icmp eq i32 %y_val, 0
br i1 %icmp, label %inner.exit, label %inner.header
; CHECK: inner.latch:
diff --git a/llvm/test/Transforms/LICM/lnicm-sink.ll b/llvm/test/Transforms/LICM/lnicm-sink.ll
index 54dfd7bb26699..96c812c6d8de5 100644
--- a/llvm/test/Transforms/LICM/lnicm-sink.ll
+++ b/llvm/test/Transforms/LICM/lnicm-sink.ll
@@ -22,7 +22,7 @@
; to try to make a perfect loop nest. (though y[i] = s; still prevents the
; loop nest from being a perfect loop nest in this test case)
-define dso_local double @test(double %x, i32* noalias %y) {
+define dso_local double @test(double %x, ptr noalias %y) {
entry:
br label %for.body
@@ -48,8 +48,8 @@ for.end:
%s.1.lcssa = phi i32 [ %call4, %for.body3 ]
%t.1.lcssa = phi double [ %call, %for.body3 ]
%idxprom = sext i32 %i.02 to i64
- %arrayidx = getelementptr inbounds i32, i32* %y, i64 %idxprom
- store i32 %s.1.lcssa, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %y, i64 %idxprom
+ store i32 %s.1.lcssa, ptr %arrayidx, align 4
%inc6 = add nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc6, 10
br i1 %cmp, label %for.body, label %for.end7
@@ -77,7 +77,7 @@ for.end7:
; return t;
; }
;
-define dso_local double @test2(double %x, i32* noalias %y) {
+define dso_local double @test2(double %x, ptr noalias %y) {
entry:
br label %for.body
@@ -114,8 +114,8 @@ for.end:
%s.1.lcssa = phi i32 [ %s.lcssa.k, %for.end.k ]
%t.1.lcssa = phi double [ %t.lcssa.k, %for.end.k ]
%idxprom = sext i32 %i.02 to i64
- %arrayidx = getelementptr inbounds i32, i32* %y, i64 %idxprom
- store i32 %s.1.lcssa, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %y, i64 %idxprom
+ store i32 %s.1.lcssa, ptr %arrayidx, align 4
%inc6 = add nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc6, 10
br i1 %cmp, label %for.body, label %for.end7
diff --git a/llvm/test/Transforms/LICM/loopsink-pr38462.ll b/llvm/test/Transforms/LICM/loopsink-pr38462.ll
index 8d06c3742a54c..283e3c489184b 100644
--- a/llvm/test/Transforms/LICM/loopsink-pr38462.ll
+++ b/llvm/test/Transforms/LICM/loopsink-pr38462.ll
@@ -4,13 +4,13 @@
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc19.13.26128"
-%struct.FontInfoData = type { i32 (...)** }
+%struct.FontInfoData = type { ptr }
%struct.S = type { i8 }
; CHECK: @pr38462
; Make sure not to assert by trying to sink into catch.dispatch.
-define void @pr38462(%struct.FontInfoData* %this) personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*) !prof !1 {
+define void @pr38462(ptr %this) personality ptr @__C_specific_handler !prof !1 {
entry:
%s = alloca %struct.S
%call6 = call i32 @f()
@@ -18,7 +18,6 @@ entry:
br i1 %tobool7, label %for.body.lr.ph, label %for.cond.cleanup
for.body.lr.ph:
- %0 = getelementptr inbounds %struct.S, %struct.S* %s, i64 0, i32 0
br label %for.body
for.cond.cleanup.loopexit:
@@ -31,15 +30,15 @@ for.body:
%call2 = invoke i32 @f() to label %__try.cont unwind label %catch.dispatch
catch.dispatch:
- %1 = catchswitch within none [label %__except] unwind to caller
+ %0 = catchswitch within none [label %__except] unwind to caller
__except:
- %2 = catchpad within %1 [i8* null]
- catchret from %2 to label %__except3
+ %1 = catchpad within %0 [ptr null]
+ catchret from %1 to label %__except3
__except3:
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %0)
- %call.i = call zeroext i1 @g(%struct.S* nonnull %s)
+ call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %s)
+ %call.i = call zeroext i1 @g(ptr nonnull %s)
br i1 %call.i, label %if.then.i, label %exit
if.then.i:
@@ -47,7 +46,7 @@ if.then.i:
br label %exit
exit:
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %0)
+ call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %s)
br label %__try.cont
__try.cont:
@@ -58,9 +57,9 @@ __try.cont:
declare i32 @__C_specific_handler(...)
declare i32 @f()
-declare zeroext i1 @g(%struct.S*)
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
+declare zeroext i1 @g(ptr)
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
!1 = !{!"function_entry_count", i64 1}
diff --git a/llvm/test/Transforms/LICM/loopsink-pr39570.ll b/llvm/test/Transforms/LICM/loopsink-pr39570.ll
index 0446ccd72d585..7ec4382031f98 100644
--- a/llvm/test/Transforms/LICM/loopsink-pr39570.ll
+++ b/llvm/test/Transforms/LICM/loopsink-pr39570.ll
@@ -4,54 +4,54 @@
; CHECK: pr39570
; Make sure not to assert.
-%0 = type { i32, %1*, %2, %6*, %33* }
-%1 = type { i32 (...)** }
-%2 = type { %3* }
-%3 = type { %4, i32, %5* }
-%4 = type { i32 (...)**, i32 }
+%0 = type { i32, ptr, %2, ptr, ptr }
+%1 = type { ptr }
+%2 = type { ptr }
+%3 = type { %4, i32, ptr }
+%4 = type { ptr, i32 }
%5 = type opaque
-%6 = type { %7, %1*, %31*, i8, %2, %32* }
-%7 = type <{ %8, %9*, %10, i32, %33*, %33*, %33*, %27, %28, i16 }>
-%8 = type { i32 (...)** }
+%6 = type { %7, ptr, ptr, i8, %2, ptr }
+%7 = type <{ %8, ptr, %10, i32, ptr, ptr, ptr, %27, %28, i16 }>
+%8 = type { ptr }
%9 = type opaque
%10 = type { %11, %16, %18, %19 }
-%11 = type { %12*, i32, i32, %13* }
-%12 = type { i32 (...)** }
-%13 = type { %14*, %14* }
+%11 = type { ptr, i32, i32, ptr }
+%12 = type { ptr }
+%13 = type { ptr, ptr }
%14 = type { %15, i32 }
-%15 = type { %12*, i32, i32, i16* }
-%16 = type { %12*, i32, i32, %17* }
-%17 = type { %13, %14* }
-%18 = type { %12*, i32, i32, %14** }
-%19 = type { %20, %21, %12*, float, i32, i32, %22, %22, %24, i32, i32 }
+%15 = type { ptr, i32, i32, ptr }
+%16 = type { ptr, i32, i32, ptr }
+%17 = type { %13, ptr }
+%18 = type { ptr, i32, i32, ptr }
+%19 = type { %20, %21, ptr, float, i32, i32, %22, %22, %24, i32, i32 }
%20 = type { i8 }
%21 = type { i8 }
-%22 = type { %12*, %23*, %23* }
+%22 = type { ptr, ptr, ptr }
%23 = type opaque
-%24 = type { %12*, i32, i32, %25* }
-%25 = type { %12*, i32, i32, %26* }
+%24 = type { ptr, i32, i32, ptr }
+%25 = type { ptr, i32, i32, ptr }
%26 = type opaque
-%27 = type { %33* }
-%28 = type { %29, i32, i32, %14* }
+%27 = type { ptr }
+%28 = type { %29, i32, i32, ptr }
%29 = type { %30 }
-%30 = type { i32 (...)** }
+%30 = type { ptr }
%31 = type opaque
-%32 = type { i32 (...)** }
-%33 = type <{ %8, %9*, %10, i32, %33*, %33*, %33*, %27, %28, i16, [2 x i8] }>
+%32 = type { ptr }
+%33 = type <{ %8, ptr, %10, i32, ptr, ptr, ptr, %27, %28, i16, [2 x i8] }>
-define dso_local void @pr39570() local_unnamed_addr align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !prof !1 {
+define dso_local void @pr39570() local_unnamed_addr align 2 personality ptr @__gxx_personality_v0 !prof !1 {
br i1 undef, label %8, label %1, !prof !2
; <label>:1: ; preds = %0
- %2 = load %0*, %0** undef, align 4
+ %2 = load ptr, ptr undef, align 4
br label %3
; <label>:3: ; preds = %7, %1
- %4 = getelementptr inbounds %0, %0* %2, i32 undef, i32 0
+ %4 = getelementptr inbounds %0, ptr %2, i32 undef, i32 0
br label %5
; <label>:5: ; preds = %3
- %6 = getelementptr inbounds %0, %0* %2, i32 undef, i32 4
+ %6 = getelementptr inbounds %0, ptr %2, i32 undef, i32 4
br i1 undef, label %18, label %7, !prof !3
; <label>:7: ; preds = %5
@@ -66,23 +66,23 @@ define dso_local void @pr39570() local_unnamed_addr align 2 personality i8* bitc
to label %17 unwind label %10
; <label>:10: ; preds = %9
- %11 = landingpad { i8*, i32 }
- catch i8* null
+ %11 = landingpad { ptr, i32 }
+ catch ptr null
unreachable
; <label>:12: ; preds = %8
- %13 = landingpad { i8*, i32 }
+ %13 = landingpad { ptr, i32 }
cleanup
invoke void @bar()
to label %16 unwind label %14
; <label>:14: ; preds = %12
- %15 = landingpad { i8*, i32 }
- catch i8* null
+ %15 = landingpad { ptr, i32 }
+ catch ptr null
unreachable
; <label>:16: ; preds = %12
- resume { i8*, i32 } %13
+ resume { ptr, i32 } %13
; <label>:17: ; preds = %9
br label %18
@@ -96,8 +96,8 @@ define dso_local void @pr39570() local_unnamed_addr align 2 personality i8* bitc
to label %22 unwind label %20
; <label>:20: ; preds = %19
- %21 = landingpad { i8*, i32 }
- catch i8* null
+ %21 = landingpad { ptr, i32 }
+ catch ptr null
unreachable
; <label>:22: ; preds = %19
diff --git a/llvm/test/Transforms/LICM/loopsink-pr39695.ll b/llvm/test/Transforms/LICM/loopsink-pr39695.ll
index ddb940a2af460..9545c8aed50b8 100644
--- a/llvm/test/Transforms/LICM/loopsink-pr39695.ll
+++ b/llvm/test/Transforms/LICM/loopsink-pr39695.ll
@@ -4,13 +4,13 @@
; The load instruction should not be sunk into following loop.
; CHECK: @foo
; CHECK-NEXT: entry
-; CHECK-NEXT: %ptr = load i8*, i8** %pp, align 8
-; CHECK-NEXT: store i8* null, i8** %pp, align 8
+; CHECK-NEXT: %ptr = load ptr, ptr %pp, align 8
+; CHECK-NEXT: store ptr null, ptr %pp, align 8
-define i32 @foo(i32 %n, i8** %pp) !prof !0 {
+define i32 @foo(i32 %n, ptr %pp) !prof !0 {
entry:
- %ptr = load i8*, i8** %pp, align 8
- store i8* null, i8** %pp, align 8
+ %ptr = load ptr, ptr %pp, align 8
+ store ptr null, ptr %pp, align 8
br label %for.cond
for.cond: ; preds = %for.body, %entry
@@ -20,8 +20,8 @@ for.cond: ; preds = %for.body, %entry
for.body: ; preds = %for.cond
%0 = sext i32 %i.0 to i64
- %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %0
- %1 = load i8, i8* %arrayidx, align 1
+ %arrayidx = getelementptr inbounds i8, ptr %ptr, i64 %0
+ %1 = load i8, ptr %arrayidx, align 1
%or19 = call i8 @llvm.bitreverse.i8(i8 %1)
%v = sext i8 %or19 to i32
%inc = add i32 %i.0, %v
diff --git a/llvm/test/Transforms/LICM/loopsink.ll b/llvm/test/Transforms/LICM/loopsink.ll
index 87697364295d6..da907f6bb3676 100644
--- a/llvm/test/Transforms/LICM/loopsink.ll
+++ b/llvm/test/Transforms/LICM/loopsink.ll
@@ -19,15 +19,15 @@
; Sink load to b2
; CHECK: t1
; CHECK: .b2:
-; CHECK: load i32, i32* @g
+; CHECK: load i32, ptr @g
; CHECK: .b3:
-; CHECK-NOT: load i32, i32* @g
+; CHECK-NOT: load i32, ptr @g
define i32 @t1(i32, i32) #0 !prof !0 {
%3 = icmp eq i32 %1, 0
br i1 %3, label %.exit, label %.preheader
.preheader:
- %invariant = load i32, i32* @g
+ %invariant = load i32, ptr @g
br label %.b1
.b1:
@@ -82,19 +82,19 @@ define i32 @t1(i32, i32) #0 !prof !0 {
; Sink load to b3 and b6
; CHECK: t2
; CHECK: .preheader:
-; CHECK-NOT: load i32, i32* @g
+; CHECK-NOT: load i32, ptr @g
; CHECK: .b3:
-; CHECK: load i32, i32* @g
+; CHECK: load i32, ptr @g
; CHECK: .b4:
; CHECK: .b6:
-; CHECK: load i32, i32* @g
+; CHECK: load i32, ptr @g
; CHECK: .b7:
define i32 @t2(i32, i32) #0 !prof !0 {
%3 = icmp eq i32 %1, 0
br i1 %3, label %.exit, label %.preheader
.preheader:
- %invariant = load i32, i32* @g
+ %invariant = load i32, ptr @g
br label %.b1
.b1:
@@ -148,15 +148,15 @@ define i32 @t2(i32, i32) #0 !prof !0 {
; Do not sink load from preheader.
; CHECK: t3
; CHECK: .preheader:
-; CHECK: load i32, i32* @g
+; CHECK: load i32, ptr @g
; CHECK: .b1:
-; CHECK-NOT: load i32, i32* @g
+; CHECK-NOT: load i32, ptr @g
define i32 @t3(i32, i32) #0 !prof !0 {
%3 = icmp eq i32 %1, 0
br i1 %3, label %.exit, label %.preheader
.preheader:
- %invariant = load i32, i32* @g
+ %invariant = load i32, ptr @g
br label %.b1
.b1:
@@ -198,13 +198,13 @@ define i32 @t3(i32, i32) #0 !prof !0 {
; For single-BB loop with <=1 avg trip count, sink load to b1
; CHECK: t4
; CHECK: .preheader:
-; CHECK-NOT: load i32, i32* @g
+; CHECK-NOT: load i32, ptr @g
; CHECK: .b1:
-; CHECK: load i32, i32* @g
+; CHECK: load i32, ptr @g
; CHECK: .exit:
define i32 @t4(i32, i32) #0 !prof !0 {
.preheader:
- %invariant = load i32, i32* @g
+ %invariant = load i32, ptr @g
br label %.b1
.b1:
@@ -233,15 +233,15 @@ define i32 @t4(i32, i32) #0 !prof !0 {
; There is alias store in loop, do not sink load
; CHECK: t5
; CHECK: .preheader:
-; CHECK: load i32, i32* @g
+; CHECK: load i32, ptr @g
; CHECK: .b1:
-; CHECK-NOT: load i32, i32* @g
-define i32 @t5(i32, i32*) #0 !prof !0 {
+; CHECK-NOT: load i32, ptr @g
+define i32 @t5(i32, ptr) #0 !prof !0 {
%3 = icmp eq i32 %0, 0
br i1 %3, label %.exit, label %.preheader
.preheader:
- %invariant = load i32, i32* @g
+ %invariant = load i32, ptr @g
br label %.b1
.b1:
@@ -296,16 +296,16 @@ define i32 @t5(i32, i32*) #0 !prof !0 {
; Regardless of aliasing store in loop this load from constant memory can be sunk.
; CHECK: t5_const_memory
; CHECK: .preheader:
-; CHECK-NOT: load i32, i32* @g_const
+; CHECK-NOT: load i32, ptr @g_const
; CHECK: .b2:
-; CHECK: load i32, i32* @g_const
+; CHECK: load i32, ptr @g_const
; CHECK: br i1 %c2, label %.b3, label %.b4
-define i32 @t5_const_memory(i32, i32*) #0 !prof !0 {
+define i32 @t5_const_memory(i32, ptr) #0 !prof !0 {
%3 = icmp eq i32 %0, 0
br i1 %3, label %.exit, label %.preheader
.preheader:
- %invariant = load i32, i32* @g_const
+ %invariant = load i32, ptr @g_const
br label %.b1
.b1:
@@ -355,15 +355,15 @@ define i32 @t5_const_memory(i32, i32*) #0 !prof !0 {
; Do not sink unordered atomic load to b2
; CHECK: t6
; CHECK: .preheader:
-; CHECK: load atomic i32, i32* @g unordered, align 4
+; CHECK: load atomic i32, ptr @g unordered, align 4
; CHECK: .b2:
-; CHECK-NOT: load atomic i32, i32* @g unordered, align 4
+; CHECK-NOT: load atomic i32, ptr @g unordered, align 4
define i32 @t6(i32, i32) #0 !prof !0 {
%3 = icmp eq i32 %1, 0
br i1 %3, label %.exit, label %.preheader
.preheader:
- %invariant = load atomic i32, i32* @g unordered, align 4
+ %invariant = load atomic i32, ptr @g unordered, align 4
br label %.b1
.b1:
@@ -403,15 +403,15 @@ define i32 @t6(i32, i32) #0 !prof !0 {
; load from constant.
; CHECK: t7
; CHECK: .preheader:
-; CHECK-NOT: load atomic i32, i32* @g_const unordered, align 4
+; CHECK-NOT: load atomic i32, ptr @g_const unordered, align 4
; CHECK: .b2:
-; CHECK: load atomic i32, i32* @g_const unordered, align 4
+; CHECK: load atomic i32, ptr @g_const unordered, align 4
define i32 @t7(i32, i32) #0 !prof !0 {
%3 = icmp eq i32 %1, 0
br i1 %3, label %.exit, label %.preheader
.preheader:
- %invariant = load atomic i32, i32* @g_const unordered, align 4
+ %invariant = load atomic i32, ptr @g_const unordered, align 4
br label %.b1
.b1:
diff --git a/llvm/test/Transforms/LICM/opt-remarks-conditional-load.ll b/llvm/test/Transforms/LICM/opt-remarks-conditional-load.ll
index abe1fa9275a80..3e540001085a4 100644
--- a/llvm/test/Transforms/LICM/opt-remarks-conditional-load.ll
+++ b/llvm/test/Transforms/LICM/opt-remarks-conditional-load.ll
@@ -5,22 +5,22 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
; With the load from %p conditional, we can't optmize this and the remark
; should tell us about it.
-define void @test(i32* %array, i32* noalias %p) {
+define void @test(ptr %array, ptr noalias %p) {
Entry:
br label %Loop
Loop:
%j = phi i32 [ 0, %Entry ], [ %Next, %else]
- %addr = getelementptr i32, i32* %array, i32 %j
- %a = load i32, i32* %addr
+ %addr = getelementptr i32, ptr %array, i32 %j
+ %a = load i32, ptr %addr
%c = icmp eq i32 %a, 0
br i1 %c, label %then, label %else
then:
; CHECK: remark: /tmp/kk.c:2:20: failed to hoist load with loop-invariant address because load is conditionally executed
- %b = load i32, i32* %p, !dbg !8
+ %b = load i32, ptr %p, !dbg !8
%a2 = add i32 %a, %b
- store i32 %a2, i32* %addr
+ store i32 %a2, ptr %addr
br label %else
else:
diff --git a/llvm/test/Transforms/LICM/opt-remarks-intervening-store.ll b/llvm/test/Transforms/LICM/opt-remarks-intervening-store.ll
index ce6dc61b4b737..8cdd656a43b1a 100644
--- a/llvm/test/Transforms/LICM/opt-remarks-intervening-store.ll
+++ b/llvm/test/Transforms/LICM/opt-remarks-intervening-store.ll
@@ -5,18 +5,18 @@ target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:1
; Without the noalias on %p, we can't optmize this and the remark should tell
; us about it.
-define void @test(i32* %array, i32* %p) {
+define void @test(ptr %array, ptr %p) {
Entry:
br label %Loop
Loop:
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ]
- %addr = getelementptr i32, i32* %array, i32 %j
- %a = load i32, i32* %addr
+ %addr = getelementptr i32, ptr %array, i32 %j
+ %a = load i32, ptr %addr
; CHECK: remark: /tmp/kk.c:2:20: failed to move load with loop-invariant address because the loop may invalidate its value
- %b = load i32, i32* %p, !dbg !8
+ %b = load i32, ptr %p, !dbg !8
%a2 = add i32 %a, %b
- store i32 %a2, i32* %addr
+ store i32 %a2, ptr %addr
%Next = add i32 %j, 1
%cond = icmp eq i32 %Next, 0
br i1 %cond, label %Out, label %Loop
@@ -28,7 +28,7 @@ Out:
; This illustrates why we need to check loop-invariance before issuing this
; remark.
-define i32 @invalidated_load_with_non_loop_invariant_address(i32* %array, i32* %array2) {
+define i32 @invalidated_load_with_non_loop_invariant_address(ptr %array, ptr %array2) {
Entry:
br label %Loop
@@ -36,11 +36,11 @@ Loop:
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ]
; CHECK-NOT: /tmp/kk.c:3:20: {{.*}} loop-invariant
- %addr = getelementptr i32, i32* %array, i32 %j
- %a = load i32, i32* %addr, !dbg !9
+ %addr = getelementptr i32, ptr %array, i32 %j
+ %a = load i32, ptr %addr, !dbg !9
- %addr2 = getelementptr i32, i32* %array2, i32 %j
- store i32 %j, i32* %addr2
+ %addr2 = getelementptr i32, ptr %array2, i32 %j
+ store i32 %j, ptr %addr2
%Next = add i32 %j, 1
%cond = icmp eq i32 %Next, 0
diff --git a/llvm/test/Transforms/LICM/opt-remarks.ll b/llvm/test/Transforms/LICM/opt-remarks.ll
index a5cffd1145ba5..ebf784907fd99 100644
--- a/llvm/test/Transforms/LICM/opt-remarks.ll
+++ b/llvm/test/Transforms/LICM/opt-remarks.ll
@@ -2,18 +2,18 @@
; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' %s -o /dev/null -pass-remarks=licm 2>&1 | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
-define void @hoist(i32* %array, i32* noalias %p) {
+define void @hoist(ptr %array, ptr noalias %p) {
Entry:
br label %Loop
Loop:
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ]
- %addr = getelementptr i32, i32* %array, i32 %j
- %a = load i32, i32* %addr
+ %addr = getelementptr i32, ptr %array, i32 %j
+ %a = load i32, ptr %addr
; CHECK: remark: /tmp/kk.c:2:20: hoisting load
- %b = load i32, i32* %p, !dbg !8
+ %b = load i32, ptr %p, !dbg !8
%a2 = add i32 %a, %b
- store i32 %a2, i32* %addr
+ store i32 %a2, ptr %addr
%Next = add i32 %j, 1
%cond = icmp eq i32 %Next, 0
br i1 %cond, label %Out, label %Loop
@@ -22,16 +22,16 @@ Out:
ret void
}
-define i32 @sink(i32* %array, i32* noalias %p, i32 %b) {
+define i32 @sink(ptr %array, ptr noalias %p, i32 %b) {
Entry:
br label %Loop
Loop:
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ]
- %addr = getelementptr i32, i32* %array, i32 %j
- %a = load i32, i32* %addr
+ %addr = getelementptr i32, ptr %array, i32 %j
+ %a = load i32, ptr %addr
%a2 = add i32 %a, %b
- store i32 %a2, i32* %addr
+ store i32 %a2, ptr %addr
; CHECK: remark: /tmp/kk.c:2:21: sinking add
%a3 = add i32 %a, 1, !dbg !9
%Next = add i32 %j, 1
@@ -43,19 +43,19 @@ Out:
ret i32 %a4
}
-define void @promote(i32* %array, i32* noalias %p) {
+define void @promote(ptr %array, ptr noalias %p) {
Entry:
br label %Loop
Loop:
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ]
- %addr = getelementptr i32, i32* %array, i32 %j
- %a = load i32, i32* %addr
- %b = load i32, i32* %p
+ %addr = getelementptr i32, ptr %array, i32 %j
+ %a = load i32, ptr %addr
+ %b = load i32, ptr %p
%a2 = add i32 %a, %b
- store i32 %a2, i32* %addr
+ store i32 %a2, ptr %addr
; CHECK: remark: /tmp/kk.c:2:22: Moving accesses to memory location out of the loop
- store i32 %b, i32* %p, !dbg !10
+ store i32 %b, ptr %p, !dbg !10
%Next = add i32 %j, 1
%cond = icmp eq i32 %Next, 0
br i1 %cond, label %Out, label %Loop
diff --git a/llvm/test/Transforms/LICM/pr23608.ll b/llvm/test/Transforms/LICM/pr23608.ll
index 8d1c20bfbc7ac..181c22879219a 100644
--- a/llvm/test/Transforms/LICM/pr23608.ll
+++ b/llvm/test/Transforms/LICM/pr23608.ll
@@ -7,7 +7,7 @@ target triple = "x86_64-unknown-linux-gnu"
%struct.PyFrameObject = type { i32 }
- at a = common global %struct.PyFrameObject* null, align 8
+ at a = common global ptr null, align 8
@__msan_origin_tls = external thread_local(initialexec) global i32
define void @fn1() {
@@ -15,20 +15,19 @@ define void @fn1() {
; NO_ASSUME-NEXT: entry:
; NO_ASSUME-NEXT: br label [[INDIRECTGOTO:%.*]]
; NO_ASSUME: while.cond:
-; NO_ASSUME-NEXT: [[TMP:%.*]] = load %struct.PyFrameObject*, %struct.PyFrameObject** @a, align 8
-; NO_ASSUME-NEXT: [[F_IBLOCK:%.*]] = getelementptr inbounds [[STRUCT_PYFRAMEOBJECT:%.*]], %struct.PyFrameObject* [[TMP]], i64 0, i32 0
+; NO_ASSUME-NEXT: [[TMP:%.*]] = load ptr, ptr @a, align 8
; NO_ASSUME-NEXT: br label [[BB2:%.*]]
; NO_ASSUME: bb:
; NO_ASSUME-NEXT: call void @__msan_warning_noreturn()
; NO_ASSUME-NEXT: unreachable
; NO_ASSUME: bb2:
-; NO_ASSUME-NEXT: [[TMP4:%.*]] = ptrtoint i32* [[F_IBLOCK]] to i64
+; NO_ASSUME-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[TMP]] to i64
; NO_ASSUME-NEXT: [[TOBOOL:%.*]] = icmp eq i64 [[TMP4]], 0
; NO_ASSUME-NEXT: br i1 [[TOBOOL]], label [[BB13:%.*]], label [[BB15:%.*]]
; NO_ASSUME: bb13:
-; NO_ASSUME-NEXT: [[F_IBLOCK_LCSSA:%.*]] = phi i32* [ [[F_IBLOCK]], [[BB2]] ]
-; NO_ASSUME-NEXT: [[TMP4_LE:%.*]] = ptrtoint i32* [[F_IBLOCK_LCSSA]] to i64
-; NO_ASSUME-NEXT: [[TMP8_LE:%.*]] = inttoptr i64 [[TMP4_LE]] to i32*
+; NO_ASSUME-NEXT: [[F_IBLOCK_LCSSA:%.*]] = phi ptr [ [[TMP]], [[BB2]] ]
+; NO_ASSUME-NEXT: [[TMP4_LE:%.*]] = ptrtoint ptr [[F_IBLOCK_LCSSA]] to i64
+; NO_ASSUME-NEXT: [[TMP8_LE:%.*]] = inttoptr i64 [[TMP4_LE]] to ptr
; NO_ASSUME-NEXT: call void @__msan_warning_noreturn()
; NO_ASSUME-NEXT: unreachable
; NO_ASSUME: bb15:
@@ -36,29 +35,28 @@ define void @fn1() {
; NO_ASSUME: while.end:
; NO_ASSUME-NEXT: ret void
; NO_ASSUME: indirectgoto:
-; NO_ASSUME-NEXT: indirectbr i8* null, [label [[INDIRECTGOTO]], label %while.cond]
+; NO_ASSUME-NEXT: indirectbr ptr null, [label [[INDIRECTGOTO]], label %while.cond]
;
; USE_ASSUME-LABEL: @fn1(
; USE_ASSUME-NEXT: entry:
; USE_ASSUME-NEXT: br label [[INDIRECTGOTO:%.*]]
; USE_ASSUME: while.cond:
-; USE_ASSUME-NEXT: [[TMP:%.*]] = load %struct.PyFrameObject*, %struct.PyFrameObject** @a, align 8
-; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(i64* inttoptr (i64 and (i64 ptrtoint (%struct.PyFrameObject** @a to i64), i64 -70368744177665) to i64*), i64 8), "nonnull"(i64* inttoptr (i64 and (i64 ptrtoint (%struct.PyFrameObject** @a to i64), i64 -70368744177665) to i64*)), "align"(i64* inttoptr (i64 and (i64 ptrtoint (%struct.PyFrameObject** @a to i64), i64 -70368744177665) to i64*), i64 8) ]
-; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(i32* inttoptr (i64 add (i64 and (i64 ptrtoint (%struct.PyFrameObject** @a to i64), i64 -70368744177665), i64 35184372088832) to i32*), i64 4), "nonnull"(i32* inttoptr (i64 add (i64 and (i64 ptrtoint (%struct.PyFrameObject** @a to i64), i64 -70368744177665), i64 35184372088832) to i32*)), "align"(i32* inttoptr (i64 add (i64 and (i64 ptrtoint (%struct.PyFrameObject** @a to i64), i64 -70368744177665), i64 35184372088832) to i32*), i64 8) ]
-; USE_ASSUME-NEXT: [[F_IBLOCK:%.*]] = getelementptr inbounds [[STRUCT_PYFRAMEOBJECT:%.*]], %struct.PyFrameObject* [[TMP]], i64 0, i32 0
+; USE_ASSUME-NEXT: [[TMP:%.*]] = load ptr, ptr @a, align 8
+; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr inttoptr (i64 and (i64 ptrtoint (ptr @a to i64), i64 -70368744177665) to ptr), i64 8), "nonnull"(ptr inttoptr (i64 and (i64 ptrtoint (ptr @a to i64), i64 -70368744177665) to ptr)), "align"(ptr inttoptr (i64 and (i64 ptrtoint (ptr @a to i64), i64 -70368744177665) to ptr), i64 8) ]
+; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr inttoptr (i64 add (i64 and (i64 ptrtoint (ptr @a to i64), i64 -70368744177665), i64 35184372088832) to ptr), i64 4), "nonnull"(ptr inttoptr (i64 add (i64 and (i64 ptrtoint (ptr @a to i64), i64 -70368744177665), i64 35184372088832) to ptr)), "align"(ptr inttoptr (i64 add (i64 and (i64 ptrtoint (ptr @a to i64), i64 -70368744177665), i64 35184372088832) to ptr), i64 8) ]
; USE_ASSUME-NEXT: br label [[BB2:%.*]]
; USE_ASSUME: bb:
; USE_ASSUME-NEXT: call void @__msan_warning_noreturn()
; USE_ASSUME-NEXT: unreachable
; USE_ASSUME: bb2:
-; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(%struct.PyFrameObject* [[TMP]], i64 4), "nonnull"(%struct.PyFrameObject* [[TMP]]), "align"(%struct.PyFrameObject* [[TMP]], i64 4) ]
-; USE_ASSUME-NEXT: [[TMP4:%.*]] = ptrtoint i32* [[F_IBLOCK]] to i64
+; USE_ASSUME-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr [[TMP]], i64 4), "nonnull"(ptr [[TMP]]), "align"(ptr [[TMP]], i64 4) ]
+; USE_ASSUME-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[TMP]] to i64
; USE_ASSUME-NEXT: [[TOBOOL:%.*]] = icmp eq i64 [[TMP4]], 0
; USE_ASSUME-NEXT: br i1 [[TOBOOL]], label [[BB13:%.*]], label [[BB15:%.*]]
; USE_ASSUME: bb13:
-; USE_ASSUME-NEXT: [[F_IBLOCK_LCSSA:%.*]] = phi i32* [ [[F_IBLOCK]], [[BB2]] ]
-; USE_ASSUME-NEXT: [[TMP4_LE:%.*]] = ptrtoint i32* [[F_IBLOCK_LCSSA]] to i64
-; USE_ASSUME-NEXT: [[TMP8_LE:%.*]] = inttoptr i64 [[TMP4_LE]] to i32*
+; USE_ASSUME-NEXT: [[F_IBLOCK_LCSSA:%.*]] = phi ptr [ [[TMP]], [[BB2]] ]
+; USE_ASSUME-NEXT: [[TMP4_LE:%.*]] = ptrtoint ptr [[F_IBLOCK_LCSSA]] to i64
+; USE_ASSUME-NEXT: [[TMP8_LE:%.*]] = inttoptr i64 [[TMP4_LE]] to ptr
; USE_ASSUME-NEXT: call void @__msan_warning_noreturn()
; USE_ASSUME-NEXT: unreachable
; USE_ASSUME: bb15:
@@ -66,16 +64,15 @@ define void @fn1() {
; USE_ASSUME: while.end:
; USE_ASSUME-NEXT: ret void
; USE_ASSUME: indirectgoto:
-; USE_ASSUME-NEXT: indirectbr i8* null, [label [[INDIRECTGOTO]], label %while.cond]
+; USE_ASSUME-NEXT: indirectbr ptr null, [label [[INDIRECTGOTO]], label %while.cond]
;
entry:
br label %indirectgoto
while.cond: ; preds = %indirectgoto, %bb15
- %tmp = load %struct.PyFrameObject*, %struct.PyFrameObject** @a, align 8
- %_msld = load i64, i64* inttoptr (i64 and (i64 ptrtoint (%struct.PyFrameObject** @a to i64), i64 -70368744177665) to i64*), align 8
- %tmp1 = load i32, i32* inttoptr (i64 add (i64 and (i64 ptrtoint (%struct.PyFrameObject** @a to i64), i64 -70368744177665), i64 35184372088832) to i32*), align 8
- %f_iblock = getelementptr inbounds %struct.PyFrameObject, %struct.PyFrameObject* %tmp, i64 0, i32 0
+ %tmp = load ptr, ptr @a, align 8
+ %_msld = load i64, ptr inttoptr (i64 and (i64 ptrtoint (ptr @a to i64), i64 -70368744177665) to ptr), align 8
+ %tmp1 = load i32, ptr inttoptr (i64 add (i64 and (i64 ptrtoint (ptr @a to i64), i64 -70368744177665), i64 35184372088832) to ptr), align 8
br label %bb2
bb: ; preds = %while.cond
@@ -83,14 +80,14 @@ bb: ; preds = %while.cond
unreachable
bb2: ; preds = %while.cond
- %tmp3 = load i32, i32* %f_iblock, align 4
- %tmp4 = ptrtoint i32* %f_iblock to i64
- %tmp8 = inttoptr i64 %tmp4 to i32*
+ %tmp3 = load i32, ptr %tmp, align 4
+ %tmp4 = ptrtoint ptr %tmp to i64
+ %tmp8 = inttoptr i64 %tmp4 to ptr
%tobool = icmp eq i64 %tmp4, 0
br i1 %tobool, label %bb13, label %bb15
bb13: ; preds = %bb2
- %.lcssa7 = phi i32* [ %tmp8, %bb2 ]
+ %.lcssa7 = phi ptr [ %tmp8, %bb2 ]
call void @__msan_warning_noreturn()
unreachable
@@ -101,7 +98,7 @@ while.end: ; preds = %bb15
ret void
indirectgoto: ; preds = %indirectgoto, %entry
- indirectbr i8* null, [label %indirectgoto, label %while.cond]
+ indirectbr ptr null, [label %indirectgoto, label %while.cond]
}
declare void @__msan_warning_noreturn()
diff --git a/llvm/test/Transforms/LICM/pr26843.ll b/llvm/test/Transforms/LICM/pr26843.ll
index 0301f2793e334..bbb501d69079b 100644
--- a/llvm/test/Transforms/LICM/pr26843.ll
+++ b/llvm/test/Transforms/LICM/pr26843.ll
@@ -8,7 +8,7 @@ target triple = "i686-pc-windows-msvc18.0.0"
; Make sure the store to v is not sunk past the memset
; CHECK-LABEL: @main
; CHECK: for.body:
-; CHECK-NEXT: store i32 1, i32* @v
+; CHECK-NEXT: store i32 1, ptr @v
; CHECK-NEXT: tail call void @llvm.memset
; CHECK: end:
; CHECK-NEXT: ret i32 0
@@ -18,8 +18,8 @@ entry:
br label %for.body
for.body:
- store i32 1, i32* @v, align 4
- tail call void @llvm.memset.p0i8.i32(i8* align 4 bitcast (i32* @v to i8*), i8 0, i32 4, i1 false)
+ store i32 1, ptr @v, align 4
+ tail call void @llvm.memset.p0.i32(ptr align 4 @v, i8 0, i32 4, i1 false)
br label %for.latch
for.latch:
@@ -29,4 +29,4 @@ end:
ret i32 0
}
-declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i1)
+declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1)
diff --git a/llvm/test/Transforms/LICM/pr27262.ll b/llvm/test/Transforms/LICM/pr27262.ll
index 9ba42d5dd7986..a130b520ed498 100644
--- a/llvm/test/Transforms/LICM/pr27262.ll
+++ b/llvm/test/Transforms/LICM/pr27262.ll
@@ -6,21 +6,21 @@ target triple = "i686-pc-windows-msvc18.0.0"
; Make sure the store to v is not sunk past the memset
; CHECK-LABEL: @main
; CHECK: for.body:
-; CHECK-NEXT: store i8 1, i8* %p
-; CHECK-NEXT: store i8 2, i8* %p1
+; CHECK-NEXT: store i8 1, ptr %p
+; CHECK-NEXT: store i8 2, ptr %p1
; CHECK-NEXT: call void @llvm.memset
; CHECK: end:
; CHECK-NEXT: ret i32 0
-define i32 @main(i1 %k, i8* %p) {
+define i32 @main(i1 %k, ptr %p) {
entry:
- %p1 = getelementptr i8, i8* %p, i32 1
+ %p1 = getelementptr i8, ptr %p, i32 1
br label %for.body
for.body:
- store i8 1, i8* %p, align 1
- store i8 2, i8* %p1, align 1
- call void @llvm.memset.p0i8.i32(i8* %p, i8 255, i32 4, i1 false)
+ store i8 1, ptr %p, align 1
+ store i8 2, ptr %p1, align 1
+ call void @llvm.memset.p0.i32(ptr %p, i8 255, i32 4, i1 false)
br label %for.latch
for.latch:
@@ -30,4 +30,4 @@ end:
ret i32 0
}
-declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i1)
+declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1)
diff --git a/llvm/test/Transforms/LICM/pr36228.ll b/llvm/test/Transforms/LICM/pr36228.ll
index 2a86168621c69..5cb961a0f6744 100644
--- a/llvm/test/Transforms/LICM/pr36228.ll
+++ b/llvm/test/Transforms/LICM/pr36228.ll
@@ -4,37 +4,35 @@
; See PR36228.
declare void @check(i8)
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i32, i1)
+declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i32, i1)
; CHECK-LABEL: define void @buggy
-define void @buggy(i8* %src, i1* %kOne) {
+define void @buggy(ptr %src, ptr %kOne) {
entry:
%dst = alloca [1 x i8], align 1
- %0 = getelementptr inbounds [1 x i8], [1 x i8]* %dst, i64 0, i64 0
- store i8 42, i8* %0, align 1
- %src16 = bitcast i8* %src to i16*
- %srcval = load i16, i16* %src16
+ store i8 42, ptr %dst, align 1
+ %srcval = load i16, ptr %src
br label %while.cond
while.cond: ; preds = %if.end, %entry
- %dp.0 = phi i8* [ %0, %entry ], [ %dp.1, %if.end ]
- %1 = load volatile i1, i1* %kOne, align 4
- br i1 %1, label %if.else, label %if.then
+ %dp.0 = phi ptr [ %dst, %entry ], [ %dp.1, %if.end ]
+ %0 = load volatile i1, ptr %kOne, align 4
+ br i1 %0, label %if.else, label %if.then
if.then: ; preds = %while.cond
- store i8 9, i8* %dp.0, align 1
+ store i8 9, ptr %dp.0, align 1
br label %if.end
if.else: ; preds = %while.cond
- call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dp.0, i8* %src, i64 2, i32 1, i1 false)
- %dp.new = getelementptr inbounds i8, i8* %dp.0, i64 1
+ call void @llvm.memcpy.p0.p0.i64(ptr %dp.0, ptr %src, i64 2, i32 1, i1 false)
+ %dp.new = getelementptr inbounds i8, ptr %dp.0, i64 1
br label %if.end
if.end: ; preds = %if.else, %if.then
- %dp.1 = phi i8* [ %dp.0, %if.then ], [ %dp.new, %if.else ]
- ; CHECK: %2 = load i8, i8* %0
- %2 = load i8, i8* %0, align 1
- ; CHECK-NEXT: call void @check(i8 %2)
- call void @check(i8 %2)
+ %dp.1 = phi ptr [ %dp.0, %if.then ], [ %dp.new, %if.else ]
+ ; CHECK: %1 = load i8, ptr %dst
+ %1 = load i8, ptr %dst, align 1
+ ; CHECK-NEXT: call void @check(i8 %1)
+ call void @check(i8 %1)
br label %while.cond
}
diff --git a/llvm/test/Transforms/LICM/pr37323.ll b/llvm/test/Transforms/LICM/pr37323.ll
index 4930199fef24f..3d43b22449714 100644
--- a/llvm/test/Transforms/LICM/pr37323.ll
+++ b/llvm/test/Transforms/LICM/pr37323.ll
@@ -16,11 +16,11 @@ entry:
br label %for.cond
for.cond: ; preds = %if.end, %for.cond1, %entry
- %0 = phi i16 [ undef, %entry ], [ ptrtoint (i16* @c to i16), %if.end ], [ %.mux, %for.cond1 ]
+ %0 = phi i16 [ undef, %entry ], [ ptrtoint (ptr @c to i16), %if.end ], [ %.mux, %for.cond1 ]
br i1 undef, label %for.cond1, label %for.end8
for.cond1: ; preds = %if.end, %for.cond
- %.mux = select i1 undef, i16 undef, i16 ptrtoint (i16* @c to i16)
+ %.mux = select i1 undef, i16 undef, i16 ptrtoint (ptr @c to i16)
br i1 undef, label %for.cond, label %if.end
if.end: ; preds = %for.cond1
diff --git a/llvm/test/Transforms/LICM/pr38513.ll b/llvm/test/Transforms/LICM/pr38513.ll
index 0ed6ae1061ada..a08194cd4145a 100644
--- a/llvm/test/Transforms/LICM/pr38513.ll
+++ b/llvm/test/Transforms/LICM/pr38513.ll
@@ -7,16 +7,15 @@ define void @f1() {
br label %bb1
bb1: ; preds = %bb6, %0
- store i16 undef, i16* undef
+ store i16 undef, ptr undef
br label %bb2
bb2: ; preds = %bb8, %bb1
- %_tmp18.fca.0.gep = getelementptr inbounds [3 x i16], [3 x i16]* %lc1.10, i32 0, i32 0
- %_tmp18.fca.0.load = load i16, i16* %_tmp18.fca.0.gep
- %_tmp18.fca.1.gep = getelementptr inbounds [3 x i16], [3 x i16]* %lc1.10, i32 0, i32 1
- %_tmp18.fca.1.load = load i16, i16* %_tmp18.fca.1.gep
- %_tmp18.fca.2.gep = getelementptr inbounds [3 x i16], [3 x i16]* %lc1.10, i32 0, i32 2
- %_tmp18.fca.2.load = load i16, i16* %_tmp18.fca.2.gep
+ %_tmp18.fca.0.load = load i16, ptr %lc1.10
+ %_tmp18.fca.1.gep = getelementptr inbounds [3 x i16], ptr %lc1.10, i32 0, i32 1
+ %_tmp18.fca.1.load = load i16, ptr %_tmp18.fca.1.gep
+ %_tmp18.fca.2.gep = getelementptr inbounds [3 x i16], ptr %lc1.10, i32 0, i32 2
+ %_tmp18.fca.2.load = load i16, ptr %_tmp18.fca.2.gep
br label %bb8
bb8: ; preds = %bb2
diff --git a/llvm/test/Transforms/LICM/pr40317.ll b/llvm/test/Transforms/LICM/pr40317.ll
index 82c791f3bde68..fb9283814d1c0 100644
--- a/llvm/test/Transforms/LICM/pr40317.ll
+++ b/llvm/test/Transforms/LICM/pr40317.ll
@@ -11,17 +11,17 @@ target triple = "s390x-ibm-linux"
@g_18 = external dso_local global i64, align 8
; Function Attrs: argmemonly nounwind
-declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1) #1
+declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1) #1
; CHECK-LABEL: @func_94
; CHECK: bb:
-; CHECK: tail call void @llvm.memset.p0i8.i64
+; CHECK: tail call void @llvm.memset.p0.i64
; CHECK: load i32
; CHECK: bb6.licm:
; Function Attrs: noreturn nounwind
-define dso_local void @func_94(i16 %arg, i64* nocapture %arg1) local_unnamed_addr #3 {
+define dso_local void @func_94(i16 %arg, ptr nocapture %arg1) local_unnamed_addr #3 {
bb:
- tail call void @llvm.memset.p0i8.i64(i8* align 8 undef, i8 0, i64 80, i1 false)
+ tail call void @llvm.memset.p0.i64(ptr align 8 undef, i8 0, i64 80, i1 false)
br label %bb3
bb3: ; preds = %bb13, %bb
@@ -29,11 +29,11 @@ bb3: ; preds = %bb13, %bb
br i1 %tmp5, label %bb6, label %bb13
bb6: ; preds = %bb3
- %tmp7 = load i32, i32* getelementptr inbounds (%0, %0* @0, i64 0, i32 1, i32 2), align 1, !tbaa !11
+ %tmp7 = load i32, ptr getelementptr inbounds (%0, ptr @0, i64 0, i32 1, i32 2), align 1, !tbaa !11
%tmp8 = zext i32 %tmp7 to i64
%sext = shl i64 %tmp8, 56
%tmp10 = ashr exact i64 %sext, 56
- store i64 %tmp10, i64* %arg1, align 8, !tbaa !12
+ store i64 %tmp10, ptr %arg1, align 8, !tbaa !12
br label %bb13
bb13: ; preds = %bb3, %bb6
diff --git a/llvm/test/Transforms/LICM/pr42969.ll b/llvm/test/Transforms/LICM/pr42969.ll
index 428e64b9a6408..b3b07a3e59efb 100644
--- a/llvm/test/Transforms/LICM/pr42969.ll
+++ b/llvm/test/Transforms/LICM/pr42969.ll
@@ -1,6 +1,6 @@
; RUN: opt %s -S -scoped-noalias-aa -licm | FileCheck %s
-define i16 @main(i1 %a_b_mayalias, i16* %a, i16* %b) {
+define i16 @main(i1 %a_b_mayalias, ptr %a, ptr %b) {
; CHECK: scalar.body:
; CHECK-NEXT: [[J:%.*]] = phi i64
; CHECK-NEXT: [[TMP3:%.*]] = load i16
@@ -17,10 +17,10 @@ outer: ; preds = %scalar.cleanup, %en
vector.ph: ; preds = %outer
; MemoryUse(4) MayAlias
- %tmp1 = load i16, i16* %a, align 1, !alias.scope !0, !tbaa !7
+ %tmp1 = load i16, ptr %a, align 1, !alias.scope !0, !tbaa !7
%tmp2 = add i16 %tmp1, 1
; 1 = MemoryDef(4)
- store i16 %tmp2, i16* %b, align 1, !alias.scope !3, !noalias !0, !tbaa !7
+ store i16 %tmp2, ptr %b, align 1, !alias.scope !3, !noalias !0, !tbaa !7
br label %vector.body
vector.body: ; preds = %vector.body, %vector.ph
@@ -41,10 +41,10 @@ scalar.body: ; preds = %scalar.body, %scala
; 3 = MemoryPhi({scalar.ph,5},{scalar.body,2})
%j = phi i64 [ %j.next, %scalar.body ], [ %j.start, %scalar.ph ]
; MemoryUse(3) MayAlias
- %tmp3 = load i16, i16* %a, align 1, !tbaa !7
+ %tmp3 = load i16, ptr %a, align 1, !tbaa !7
%result = add i16 %tmp3, 1
; 2 = MemoryDef(3)
- store i16 %result, i16* %b, align 1, !tbaa !7
+ store i16 %result, ptr %b, align 1, !tbaa !7
%j.next = add nuw nsw i64 %j, 1
%cmp2 = icmp ult i64 %j.next, 20
br i1 %cmp2, label %scalar.body, label %scalar.cleanup
diff --git a/llvm/test/Transforms/LICM/pr50367.ll b/llvm/test/Transforms/LICM/pr50367.ll
index e660d9f626e13..3f2b1a5303874 100644
--- a/llvm/test/Transforms/LICM/pr50367.ll
+++ b/llvm/test/Transforms/LICM/pr50367.ll
@@ -1,6 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -passes='loop-mssa(licm)' < %s | FileCheck %s
- at e = external dso_local global i32*, align 8
+ at e = external dso_local global ptr, align 8
define void @main() {
; CHECK-LABEL: @main(
@@ -25,13 +25,13 @@ loop2:
br i1 undef, label %loop2.latch, label %loop.latch
loop2.latch:
- store i32 0, i32* null, align 4
+ store i32 0, ptr null, align 4
br label %loop2
loop.latch:
- store i32* null, i32** @e, align 8, !tbaa !0
- %ptr = load i32*, i32** @e, align 8, !tbaa !0
- store i32 0, i32* %ptr, align 4, !tbaa !4
+ store ptr null, ptr @e, align 8, !tbaa !0
+ %ptr = load ptr, ptr @e, align 8, !tbaa !0
+ store i32 0, ptr %ptr, align 4, !tbaa !4
br label %loop1
}
diff --git a/llvm/test/Transforms/LICM/pr51333.ll b/llvm/test/Transforms/LICM/pr51333.ll
index 8832959e6c5a7..0ee4336c7fa5b 100644
--- a/llvm/test/Transforms/LICM/pr51333.ll
+++ b/llvm/test/Transforms/LICM/pr51333.ll
@@ -4,14 +4,14 @@
; This used to assert because was have a MemoryDef for what turns out to be
; a readnone call after EarlyCSE.
- at fn_ptr = external global void ()*, align 1
+ at fn_ptr = external global ptr, align 1
define void @test() {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[DO_BODY:%.*]]
; CHECK: do.body:
-; CHECK-NEXT: store void ()* @readnone_fn, void ()** @fn_ptr, align 8
+; CHECK-NEXT: store ptr @readnone_fn, ptr @fn_ptr, align 8
; CHECK-NEXT: call void @readnone_fn()
; CHECK-NEXT: call void @foo()
; CHECK-NEXT: br label [[DO_BODY]]
@@ -20,8 +20,8 @@ entry:
br label %do.body
do.body:
- store void ()* @readnone_fn, void ()** @fn_ptr
- %fn = load void ()*, void ()** @fn_ptr
+ store ptr @readnone_fn, ptr @fn_ptr
+ %fn = load ptr, ptr @fn_ptr
call void %fn()
call void @foo()
br label %do.body
diff --git a/llvm/test/Transforms/LICM/pr55672.ll b/llvm/test/Transforms/LICM/pr55672.ll
index b78d9073ad4ae..b95036ccb093f 100644
--- a/llvm/test/Transforms/LICM/pr55672.ll
+++ b/llvm/test/Transforms/LICM/pr55672.ll
@@ -1,18 +1,17 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -passes='licm' < %s | FileCheck %s
-define void @test_01(i8 addrspace(1)* addrspace(1)* %arg, i32 %arg2) {
+define void @test_01(ptr addrspace(1) %arg, i32 %arg2) {
; CHECK-LABEL: @test_01(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[TMP103:%.*]] = load atomic i8 addrspace(1)*, i8 addrspace(1)* addrspace(1)* [[ARG:%.*]] unordered, align 8, !dereferenceable_or_null !0, !align !1
-; CHECK-NEXT: [[TMP117:%.*]] = icmp eq i8 addrspace(1)* [[TMP103]], null
-; CHECK-NEXT: [[TMP118:%.*]] = getelementptr inbounds i8, i8 addrspace(1)* [[TMP103]], i64 8
-; CHECK-NEXT: [[TMP119:%.*]] = bitcast i8 addrspace(1)* [[TMP118]] to i32 addrspace(1)*
+; CHECK-NEXT: [[TMP103:%.*]] = load atomic ptr addrspace(1), ptr addrspace(1) [[ARG:%.*]] unordered, align 8, !dereferenceable_or_null !0, !align !1
+; CHECK-NEXT: [[TMP117:%.*]] = icmp eq ptr addrspace(1) [[TMP103]], null
+; CHECK-NEXT: [[TMP118:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP103]], i64 8
; CHECK-NEXT: br i1 [[TMP117]], label [[FAIL:%.*]], label [[PREHEADER:%.*]]
; CHECK: fail:
; CHECK-NEXT: ret void
; CHECK: preheader:
-; CHECK-NEXT: [[TMP157:%.*]] = load atomic i32, i32 addrspace(1)* [[TMP119]] unordered, align 8
+; CHECK-NEXT: [[TMP157:%.*]] = load atomic i32, ptr addrspace(1) [[TMP118]] unordered, align 8
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[TMP151:%.*]] = phi i32 [ 0, [[PREHEADER]] ], [ [[TMP163:%.*]], [[LOOP]] ]
@@ -24,10 +23,9 @@ define void @test_01(i8 addrspace(1)* addrspace(1)* %arg, i32 %arg2) {
; CHECK-NEXT: br label [[LOOP]]
;
entry:
- %tmp103 = load atomic i8 addrspace(1)*, i8 addrspace(1)* addrspace(1)* %arg unordered, align 8, !dereferenceable_or_null !0, !align !1
- %tmp117 = icmp eq i8 addrspace(1)* %tmp103, null
- %tmp118 = getelementptr inbounds i8, i8 addrspace(1)* %tmp103, i64 8
- %tmp119 = bitcast i8 addrspace(1)* %tmp118 to i32 addrspace(1)*
+ %tmp103 = load atomic ptr addrspace(1), ptr addrspace(1) %arg unordered, align 8, !dereferenceable_or_null !0, !align !1
+ %tmp117 = icmp eq ptr addrspace(1) %tmp103, null
+ %tmp118 = getelementptr inbounds i8, ptr addrspace(1) %tmp103, i64 8
br i1 %tmp117, label %fail, label %preheader
fail: ; preds = %entry
@@ -40,7 +38,7 @@ loop: ; preds = %loop, %preheader
%tmp151 = phi i32 [ 0, %preheader ], [ %tmp163, %loop ]
%tmp152 = icmp ult i32 %tmp151, %arg2
call void (i1, ...) @llvm.experimental.guard(i1 %tmp152) [ "deopt"() ]
- %tmp157 = load atomic i32, i32 addrspace(1)* %tmp119 unordered, align 8
+ %tmp157 = load atomic i32, ptr addrspace(1) %tmp118 unordered, align 8
%tmp158 = icmp ult i32 %tmp151, %tmp157
call void (i1, ...) @llvm.experimental.guard(i1 %tmp158) [ "deopt"() ]
%tmp163 = add i32 %tmp151, 1
@@ -48,13 +46,12 @@ loop: ; preds = %loop, %preheader
}
; FIXME: should be able to hoist load just as test_01
-define void @test_02(i8 addrspace(1)* addrspace(1)* %arg, i32 %arg2) {
+define void @test_02(ptr addrspace(1) %arg, i32 %arg2) {
; CHECK-LABEL: @test_02(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[TMP103:%.*]] = load atomic i8 addrspace(1)*, i8 addrspace(1)* addrspace(1)* [[ARG:%.*]] unordered, align 8, !dereferenceable_or_null !0, !align !1
-; CHECK-NEXT: [[TMP117:%.*]] = icmp eq i8 addrspace(1)* [[TMP103]], null
-; CHECK-NEXT: [[TMP118:%.*]] = getelementptr inbounds i8, i8 addrspace(1)* [[TMP103]], i64 8
-; CHECK-NEXT: [[TMP119:%.*]] = bitcast i8 addrspace(1)* [[TMP118]] to i32 addrspace(1)*
+; CHECK-NEXT: [[TMP103:%.*]] = load atomic ptr addrspace(1), ptr addrspace(1) [[ARG:%.*]] unordered, align 8, !dereferenceable_or_null !0, !align !1
+; CHECK-NEXT: [[TMP117:%.*]] = icmp eq ptr addrspace(1) [[TMP103]], null
+; CHECK-NEXT: [[TMP118:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP103]], i64 8
; CHECK-NEXT: [[FREEZE:%.*]] = freeze i1 [[TMP117]]
; CHECK-NEXT: br i1 [[FREEZE]], label [[FAIL:%.*]], label [[PREHEADER:%.*]]
; CHECK: fail:
@@ -65,17 +62,16 @@ define void @test_02(i8 addrspace(1)* addrspace(1)* %arg, i32 %arg2) {
; CHECK-NEXT: [[TMP151:%.*]] = phi i32 [ 0, [[PREHEADER]] ], [ [[TMP163:%.*]], [[LOOP]] ]
; CHECK-NEXT: [[TMP152:%.*]] = icmp ult i32 [[TMP151]], [[ARG2:%.*]]
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[TMP152]]) [ "deopt"() ]
-; CHECK-NEXT: [[TMP157:%.*]] = load atomic i32, i32 addrspace(1)* [[TMP119]] unordered, align 8
+; CHECK-NEXT: [[TMP157:%.*]] = load atomic i32, ptr addrspace(1) [[TMP118]] unordered, align 8
; CHECK-NEXT: [[TMP158:%.*]] = icmp ult i32 [[TMP151]], [[TMP157]]
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[TMP158]]) [ "deopt"() ]
; CHECK-NEXT: [[TMP163]] = add i32 [[TMP151]], 1
; CHECK-NEXT: br label [[LOOP]]
;
entry:
- %tmp103 = load atomic i8 addrspace(1)*, i8 addrspace(1)* addrspace(1)* %arg unordered, align 8, !dereferenceable_or_null !0, !align !1
- %tmp117 = icmp eq i8 addrspace(1)* %tmp103, null
- %tmp118 = getelementptr inbounds i8, i8 addrspace(1)* %tmp103, i64 8
- %tmp119 = bitcast i8 addrspace(1)* %tmp118 to i32 addrspace(1)*
+ %tmp103 = load atomic ptr addrspace(1), ptr addrspace(1) %arg unordered, align 8, !dereferenceable_or_null !0, !align !1
+ %tmp117 = icmp eq ptr addrspace(1) %tmp103, null
+ %tmp118 = getelementptr inbounds i8, ptr addrspace(1) %tmp103, i64 8
%freeze = freeze i1 %tmp117
br i1 %freeze, label %fail, label %preheader
@@ -89,7 +85,7 @@ loop: ; preds = %loop, %preheader
%tmp151 = phi i32 [ 0, %preheader ], [ %tmp163, %loop ]
%tmp152 = icmp ult i32 %tmp151, %arg2
call void (i1, ...) @llvm.experimental.guard(i1 %tmp152) [ "deopt"() ]
- %tmp157 = load atomic i32, i32 addrspace(1)* %tmp119 unordered, align 8
+ %tmp157 = load atomic i32, ptr addrspace(1) %tmp118 unordered, align 8
%tmp158 = icmp ult i32 %tmp151, %tmp157
call void (i1, ...) @llvm.experimental.guard(i1 %tmp158) [ "deopt"() ]
%tmp163 = add i32 %tmp151, 1
diff --git a/llvm/test/Transforms/LICM/pragma-licm-disable.ll b/llvm/test/Transforms/LICM/pragma-licm-disable.ll
index 16c0125ebe82b..453202984f2d2 100644
--- a/llvm/test/Transforms/LICM/pragma-licm-disable.ll
+++ b/llvm/test/Transforms/LICM/pragma-licm-disable.ll
@@ -6,13 +6,13 @@
; CHECK: entry:
; CHECK-NOT: load
; CHECK: do.body:
-; CHECK: load i64, i64* bitcast (i32** @in to i64*)
+; CHECK: load i64, ptr @in
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"
- at in = internal unnamed_addr global i32* null, align 8
- at out = internal unnamed_addr global i32* null, align 8
+ at in = internal unnamed_addr global ptr null, align 8
+ at out = internal unnamed_addr global ptr null, align 8
define void @licm_disable(i32 %N) {
entry:
@@ -20,8 +20,8 @@ entry:
do.body: ; preds = %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %do.body ]
- %v1 = load i64, i64* bitcast (i32** @in to i64*), align 8
- store i64 %v1, i64* bitcast (i32** @out to i64*), align 8
+ %v1 = load i64, ptr @in, align 8
+ store i64 %v1, ptr @out, align 8
%inc = add nsw i32 %i.0, 1
%cmp = icmp slt i32 %inc, %N
br i1 %cmp, label %do.body, label %do.end, !llvm.loop !1
diff --git a/llvm/test/Transforms/LICM/preheader-safe.ll b/llvm/test/Transforms/LICM/preheader-safe.ll
index dcad1671b7edf..f27e0b7c9f46c 100644
--- a/llvm/test/Transforms/LICM/preheader-safe.ll
+++ b/llvm/test/Transforms/LICM/preheader-safe.ll
@@ -5,7 +5,7 @@ declare void @use_nothrow(i64 %a) nounwind
declare void @use(i64 %a)
declare void @maythrow()
-define void @nothrow(i64 %x, i64 %y, i1* %cond) {
+define void @nothrow(i64 %x, i64 %y, ptr %cond) {
; CHECK-LABEL: nothrow
; CHECK-LABEL: entry
; CHECK: %div = udiv i64 %x, %y
@@ -24,7 +24,7 @@ loop2:
}
; The udiv is guarantee to execute if the loop is
-define void @throw_header_after(i64 %x, i64 %y, i1* %cond) {
+define void @throw_header_after(i64 %x, i64 %y, ptr %cond) {
; CHECK-LABEL: throw_header_after
; CHECK: %div = udiv i64 %x, %y
; CHECK-LABEL: loop
@@ -37,10 +37,10 @@ loop: ; preds = %entry, %for.inc
call void @use(i64 %div)
br label %loop
}
-define void @throw_header_after_rec(i64* %xp, i64* %yp, i1* %cond) {
+define void @throw_header_after_rec(ptr %xp, ptr %yp, ptr %cond) {
; CHECK-LABEL: throw_header_after_rec
-; CHECK: %x = load i64, i64* %xp
-; CHECK: %y = load i64, i64* %yp
+; CHECK: %x = load i64, ptr %xp
+; CHECK: %y = load i64, ptr %yp
; CHECK: %div = udiv i64 %x, %y
; CHECK-LABEL: loop
; CHECK: call void @use(i64 %div)
@@ -48,8 +48,8 @@ entry:
br label %loop
loop: ; preds = %entry, %for.inc
- %x = load i64, i64* %xp
- %y = load i64, i64* %yp
+ %x = load i64, ptr %xp
+ %y = load i64, ptr %yp
%div = udiv i64 %x, %y
call void @use(i64 %div) readonly
br label %loop
@@ -57,11 +57,11 @@ loop: ; preds = %entry, %for.inc
; Similiar to the above, but the hoistable instruction (%y in this case)
; happens not to be the first instruction in the block.
-define void @throw_header_after_nonfirst(i64* %xp, i64* %yp, i1* %cond) {
+define void @throw_header_after_nonfirst(ptr %xp, ptr %yp, ptr %cond) {
; CHECK-LABEL: throw_header_after_nonfirst
-; CHECK: %y = load i64, i64* %yp
+; CHECK: %y = load i64, ptr %yp
; CHECK-LABEL: loop
-; CHECK: %x = load i64, i64* %gep
+; CHECK: %x = load i64, ptr %gep
; CHECK: %div = udiv i64 %x, %y
; CHECK: call void @use(i64 %div)
entry:
@@ -69,16 +69,16 @@ entry:
loop: ; preds = %entry, %for.inc
%iv = phi i64 [0, %entry], [%div, %loop]
- %gep = getelementptr i64, i64* %xp, i64 %iv
- %x = load i64, i64* %gep
- %y = load i64, i64* %yp
+ %gep = getelementptr i64, ptr %xp, i64 %iv
+ %x = load i64, ptr %gep
+ %y = load i64, ptr %yp
%div = udiv i64 %x, %y
call void @use(i64 %div) readonly
br label %loop
}
; Negative test
-define void @throw_header_before(i64 %x, i64 %y, i1* %cond) {
+define void @throw_header_before(i64 %x, i64 %y, ptr %cond) {
; CHECK-LABEL: throw_header_before
; CHECK-LABEL: loop
; CHECK: %div = udiv i64 %x, %y
diff --git a/llvm/test/Transforms/LICM/promote-atomic.ll b/llvm/test/Transforms/LICM/promote-atomic.ll
index 86107d738cea6..7ce81ee270cea 100644
--- a/llvm/test/Transforms/LICM/promote-atomic.ll
+++ b/llvm/test/Transforms/LICM/promote-atomic.ll
@@ -1,30 +1,30 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -licm < %s | FileCheck %s
-%class.LiveThread = type { i64, %class.LiveThread* }
+%class.LiveThread = type { i64, ptr }
@globallive = external dso_local global i64, align 8
; The store should not be sunk (via scalar promotion) past the cmpxchg.
-define void @test(%class.LiveThread* %live_thread) {
+define void @test(ptr %live_thread) {
; CHECK-LABEL: @test(
-; CHECK-NEXT: [[NEXT_UNPROCESSED_:%.*]] = getelementptr inbounds [[CLASS_LIVETHREAD:%.*]], %class.LiveThread* [[LIVE_THREAD:%.*]], i64 0, i32 1
+; CHECK-NEXT: [[NEXT_UNPROCESSED_:%.*]] = getelementptr inbounds [[CLASS_LIVETHREAD:%.*]], ptr [[LIVE_THREAD:%.*]], i64 0, i32 1
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
-; CHECK-NEXT: store %class.LiveThread* undef, %class.LiveThread** [[NEXT_UNPROCESSED_]], align 8
-; CHECK-NEXT: [[XCHG:%.*]] = cmpxchg weak i64* @globallive, i64 undef, i64 undef release monotonic, align 8
+; CHECK-NEXT: store ptr undef, ptr [[NEXT_UNPROCESSED_]], align 8
+; CHECK-NEXT: [[XCHG:%.*]] = cmpxchg weak ptr @globallive, i64 undef, i64 undef release monotonic, align 8
; CHECK-NEXT: [[DONE:%.*]] = extractvalue { i64, i1 } [[XCHG]], 1
; CHECK-NEXT: br i1 [[DONE]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: ret void
;
- %next_unprocessed_ = getelementptr inbounds %class.LiveThread, %class.LiveThread* %live_thread, i64 0, i32 1
+ %next_unprocessed_ = getelementptr inbounds %class.LiveThread, ptr %live_thread, i64 0, i32 1
br label %loop
loop:
- store %class.LiveThread* undef, %class.LiveThread** %next_unprocessed_, align 8
- %xchg = cmpxchg weak i64* @globallive, i64 undef, i64 undef release monotonic, align 8
+ store ptr undef, ptr %next_unprocessed_, align 8
+ %xchg = cmpxchg weak ptr @globallive, i64 undef, i64 undef release monotonic, align 8
%done = extractvalue { i64, i1 } %xchg, 1
br i1 %done, label %exit, label %loop
diff --git a/llvm/test/Transforms/LICM/promote-capture.ll b/llvm/test/Transforms/LICM/promote-capture.ll
index 7d4e5868ea525..5cbe158e47a3c 100644
--- a/llvm/test/Transforms/LICM/promote-capture.ll
+++ b/llvm/test/Transforms/LICM/promote-capture.ll
@@ -2,14 +2,14 @@
; RUN: opt -S -passes='loop-mssa(licm)' < %s | FileCheck %s
declare i1 @cond(i32 %v) readnone
-declare void @capture(i32* %p) readnone
+declare void @capture(ptr %p) readnone
define void @test_captured_after_loop(i32 %len) {
; CHECK-LABEL: @test_captured_after_loop(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[COUNT:%.*]] = alloca i32, align 4
-; CHECK-NEXT: store i32 0, i32* [[COUNT]], align 4
-; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, i32* [[COUNT]], align 4
+; CHECK-NEXT: store i32 0, ptr [[COUNT]], align 4
+; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, ptr [[COUNT]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[C_INC2:%.*]] = phi i32 [ [[COUNT_PROMOTED]], [[ENTRY:%.*]] ], [ [[C_INC1:%.*]], [[LATCH:%.*]] ]
@@ -26,13 +26,13 @@ define void @test_captured_after_loop(i32 %len) {
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: [[C_INC1_LCSSA:%.*]] = phi i32 [ [[C_INC1]], [[LATCH]] ]
-; CHECK-NEXT: store i32 [[C_INC1_LCSSA]], i32* [[COUNT]], align 4
-; CHECK-NEXT: call void @capture(i32* [[COUNT]])
+; CHECK-NEXT: store i32 [[C_INC1_LCSSA]], ptr [[COUNT]], align 4
+; CHECK-NEXT: call void @capture(ptr [[COUNT]])
; CHECK-NEXT: ret void
;
entry:
%count = alloca i32
- store i32 0, i32* %count
+ store i32 0, ptr %count
br label %loop
loop:
@@ -41,9 +41,9 @@ loop:
br i1 %cond, label %if, label %latch
if:
- %c = load i32, i32* %count
+ %c = load i32, ptr %count
%c.inc = add i32 %c, 1
- store i32 %c.inc, i32* %count
+ store i32 %c.inc, ptr %count
br label %latch
latch:
@@ -52,7 +52,7 @@ latch:
br i1 %cmp, label %exit, label %loop
exit:
- call void @capture(i32* %count)
+ call void @capture(ptr %count)
ret void
}
@@ -60,8 +60,8 @@ define void @test_captured_in_loop(i32 %len) {
; CHECK-LABEL: @test_captured_in_loop(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[COUNT:%.*]] = alloca i32, align 4
-; CHECK-NEXT: store i32 0, i32* [[COUNT]], align 4
-; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, i32* [[COUNT]], align 4
+; CHECK-NEXT: store i32 0, ptr [[COUNT]], align 4
+; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, ptr [[COUNT]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[C_INC2:%.*]] = phi i32 [ [[COUNT_PROMOTED]], [[ENTRY:%.*]] ], [ [[C_INC1:%.*]], [[LATCH:%.*]] ]
@@ -70,8 +70,8 @@ define void @test_captured_in_loop(i32 %len) {
; CHECK-NEXT: br i1 [[COND]], label [[IF:%.*]], label [[LATCH]]
; CHECK: if:
; CHECK-NEXT: [[C_INC:%.*]] = add i32 [[C_INC2]], 1
-; CHECK-NEXT: store i32 [[C_INC]], i32* [[COUNT]], align 4
-; CHECK-NEXT: call void @capture(i32* [[COUNT]])
+; CHECK-NEXT: store i32 [[C_INC]], ptr [[COUNT]], align 4
+; CHECK-NEXT: call void @capture(ptr [[COUNT]])
; CHECK-NEXT: br label [[LATCH]]
; CHECK: latch:
; CHECK-NEXT: [[C_INC1]] = phi i32 [ [[C_INC]], [[IF]] ], [ [[C_INC2]], [[LOOP]] ]
@@ -83,7 +83,7 @@ define void @test_captured_in_loop(i32 %len) {
;
entry:
%count = alloca i32
- store i32 0, i32* %count
+ store i32 0, ptr %count
br label %loop
loop:
@@ -92,10 +92,10 @@ loop:
br i1 %cond, label %if, label %latch
if:
- %c = load i32, i32* %count
+ %c = load i32, ptr %count
%c.inc = add i32 %c, 1
- store i32 %c.inc, i32* %count
- call void @capture(i32* %count)
+ store i32 %c.inc, ptr %count
+ call void @capture(ptr %count)
br label %latch
latch:
@@ -111,9 +111,9 @@ define void @test_captured_before_loop(i32 %len) {
; CHECK-LABEL: @test_captured_before_loop(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[COUNT:%.*]] = alloca i32, align 4
-; CHECK-NEXT: store i32 0, i32* [[COUNT]], align 4
-; CHECK-NEXT: call void @capture(i32* [[COUNT]])
-; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, i32* [[COUNT]], align 4
+; CHECK-NEXT: store i32 0, ptr [[COUNT]], align 4
+; CHECK-NEXT: call void @capture(ptr [[COUNT]])
+; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, ptr [[COUNT]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[C_INC2:%.*]] = phi i32 [ [[COUNT_PROMOTED]], [[ENTRY:%.*]] ], [ [[C_INC1:%.*]], [[LATCH:%.*]] ]
@@ -122,7 +122,7 @@ define void @test_captured_before_loop(i32 %len) {
; CHECK-NEXT: br i1 [[COND]], label [[IF:%.*]], label [[LATCH]]
; CHECK: if:
; CHECK-NEXT: [[C_INC:%.*]] = add i32 [[C_INC2]], 1
-; CHECK-NEXT: store i32 [[C_INC]], i32* [[COUNT]], align 4
+; CHECK-NEXT: store i32 [[C_INC]], ptr [[COUNT]], align 4
; CHECK-NEXT: br label [[LATCH]]
; CHECK: latch:
; CHECK-NEXT: [[C_INC1]] = phi i32 [ [[C_INC]], [[IF]] ], [ [[C_INC2]], [[LOOP]] ]
@@ -134,8 +134,8 @@ define void @test_captured_before_loop(i32 %len) {
;
entry:
%count = alloca i32
- store i32 0, i32* %count
- call void @capture(i32* %count)
+ store i32 0, ptr %count
+ call void @capture(ptr %count)
br label %loop
loop:
@@ -144,9 +144,9 @@ loop:
br i1 %cond, label %if, label %latch
if:
- %c = load i32, i32* %count
+ %c = load i32, ptr %count
%c.inc = add i32 %c, 1
- store i32 %c.inc, i32* %count
+ store i32 %c.inc, ptr %count
br label %latch
latch:
@@ -160,12 +160,12 @@ exit:
; Should not get promoted, because the pointer is captured and may not
; be thread-local.
-define void @test_captured_before_loop_byval(i32* byval(i32) align 4 %count, i32 %len) {
+define void @test_captured_before_loop_byval(ptr byval(i32) align 4 %count, i32 %len) {
; CHECK-LABEL: @test_captured_before_loop_byval(
; CHECK-NEXT: entry:
-; CHECK-NEXT: store i32 0, i32* [[COUNT:%.*]], align 4
-; CHECK-NEXT: call void @capture(i32* [[COUNT]])
-; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, i32* [[COUNT]], align 4
+; CHECK-NEXT: store i32 0, ptr [[COUNT:%.*]], align 4
+; CHECK-NEXT: call void @capture(ptr [[COUNT]])
+; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, ptr [[COUNT]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[C_INC2:%.*]] = phi i32 [ [[COUNT_PROMOTED]], [[ENTRY:%.*]] ], [ [[C_INC1:%.*]], [[LATCH:%.*]] ]
@@ -174,7 +174,7 @@ define void @test_captured_before_loop_byval(i32* byval(i32) align 4 %count, i32
; CHECK-NEXT: br i1 [[COND]], label [[IF:%.*]], label [[LATCH]]
; CHECK: if:
; CHECK-NEXT: [[C_INC:%.*]] = add i32 [[C_INC2]], 1
-; CHECK-NEXT: store i32 [[C_INC]], i32* [[COUNT]], align 4
+; CHECK-NEXT: store i32 [[C_INC]], ptr [[COUNT]], align 4
; CHECK-NEXT: br label [[LATCH]]
; CHECK: latch:
; CHECK-NEXT: [[C_INC1]] = phi i32 [ [[C_INC]], [[IF]] ], [ [[C_INC2]], [[LOOP]] ]
@@ -185,8 +185,8 @@ define void @test_captured_before_loop_byval(i32* byval(i32) align 4 %count, i32
; CHECK-NEXT: ret void
;
entry:
- store i32 0, i32* %count
- call void @capture(i32* %count)
+ store i32 0, ptr %count
+ call void @capture(ptr %count)
br label %loop
loop:
@@ -195,9 +195,9 @@ loop:
br i1 %cond, label %if, label %latch
if:
- %c = load i32, i32* %count
+ %c = load i32, ptr %count
%c.inc = add i32 %c, 1
- store i32 %c.inc, i32* %count
+ store i32 %c.inc, ptr %count
br label %latch
latch:
@@ -209,11 +209,11 @@ exit:
ret void
}
-define void @test_captured_after_loop_byval(i32* byval(i32) align 4 %count, i32 %len) {
+define void @test_captured_after_loop_byval(ptr byval(i32) align 4 %count, i32 %len) {
; CHECK-LABEL: @test_captured_after_loop_byval(
; CHECK-NEXT: entry:
-; CHECK-NEXT: store i32 0, i32* [[COUNT:%.*]], align 4
-; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, i32* [[COUNT]], align 4
+; CHECK-NEXT: store i32 0, ptr [[COUNT:%.*]], align 4
+; CHECK-NEXT: [[COUNT_PROMOTED:%.*]] = load i32, ptr [[COUNT]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[C_INC2:%.*]] = phi i32 [ [[COUNT_PROMOTED]], [[ENTRY:%.*]] ], [ [[C_INC1:%.*]], [[LATCH:%.*]] ]
@@ -230,12 +230,12 @@ define void @test_captured_after_loop_byval(i32* byval(i32) align 4 %count, i32
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: [[C_INC1_LCSSA:%.*]] = phi i32 [ [[C_INC1]], [[LATCH]] ]
-; CHECK-NEXT: store i32 [[C_INC1_LCSSA]], i32* [[COUNT]], align 4
-; CHECK-NEXT: call void @capture(i32* [[COUNT]])
+; CHECK-NEXT: store i32 [[C_INC1_LCSSA]], ptr [[COUNT]], align 4
+; CHECK-NEXT: call void @capture(ptr [[COUNT]])
; CHECK-NEXT: ret void
;
entry:
- store i32 0, i32* %count
+ store i32 0, ptr %count
br label %loop
loop:
@@ -244,9 +244,9 @@ loop:
br i1 %cond, label %if, label %latch
if:
- %c = load i32, i32* %count
+ %c = load i32, ptr %count
%c.inc = add i32 %c, 1
- store i32 %c.inc, i32* %count
+ store i32 %c.inc, ptr %count
br label %latch
latch:
@@ -255,6 +255,6 @@ latch:
br i1 %cmp, label %exit, label %loop
exit:
- call void @capture(i32* %count)
+ call void @capture(ptr %count)
ret void
}
diff --git a/llvm/test/Transforms/LICM/promote-order.ll b/llvm/test/Transforms/LICM/promote-order.ll
index 4eb2ff56aca09..6cb129e0a72a1 100644
--- a/llvm/test/Transforms/LICM/promote-order.ll
+++ b/llvm/test/Transforms/LICM/promote-order.ll
@@ -6,12 +6,12 @@
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.8.0"
- at p = external global i8*
+ at p = external global ptr
-define i32* @_Z4doiti(i32 %n, float* %tmp1, i32* %tmp3) nounwind {
+define ptr @_Z4doiti(i32 %n, ptr %tmp1, ptr %tmp3) nounwind {
; CHECK-LABEL: for.body.lr.ph:
-; CHECK: store float 1.000000e+00, float* %tmp1
-; CHECK: store i32 1, i32* %tmp3
+; CHECK: store float 1.000000e+00, ptr %tmp1
+; CHECK: store i32 1, ptr %tmp3
; CHECK-LABEL: for.cond.for.end_crit_edge:
entry:
@@ -23,19 +23,19 @@ for.body.lr.ph: ; preds = %entry
for.body: ; preds = %for.body, %for.body.lr.ph
%i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
- store float 1.000000e+00, float* %tmp1, align 4, !tbaa !1
- store i32 1, i32* %tmp3, align 4, !tbaa !2
+ store float 1.000000e+00, ptr %tmp1, align 4, !tbaa !1
+ store i32 1, ptr %tmp3, align 4, !tbaa !2
%inc = add nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge
for.cond.for.end_crit_edge: ; preds = %for.body
- %split = phi i32* [ %tmp3, %for.body ]
+ %split = phi ptr [ %tmp3, %for.body ]
br label %for.end
for.end: ; preds = %for.cond.for.end_crit_edge, %entry
- %r.0.lcssa = phi i32* [ %split, %for.cond.for.end_crit_edge ], [ undef, %entry ]
- ret i32* %r.0.lcssa
+ %r.0.lcssa = phi ptr [ %split, %for.cond.for.end_crit_edge ], [ undef, %entry ]
+ ret ptr %r.0.lcssa
}
!0 = !{!"minimal TBAA"}
diff --git a/llvm/test/Transforms/LICM/promote-tls.ll b/llvm/test/Transforms/LICM/promote-tls.ll
index d7d23273acf08..4e4eecc40a10d 100644
--- a/llvm/test/Transforms/LICM/promote-tls.ll
+++ b/llvm/test/Transforms/LICM/promote-tls.ll
@@ -8,30 +8,29 @@
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-linux-generic"
- at p = external global i8*
+ at p = external global ptr
-declare i8* @malloc(i64)
+declare ptr @malloc(i64)
; Exercise the TLS case
-define i32* @test(i32 %n) {
+define ptr @test(i32 %n) {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[MEM:%.*]] = call noalias dereferenceable(16) i8* @malloc(i64 16)
-; CHECK-NEXT: [[ADDR:%.*]] = bitcast i8* [[MEM]] to i32*
+; CHECK-NEXT: [[MEM:%.*]] = call noalias dereferenceable(16) ptr @malloc(i64 16)
; CHECK-NEXT: br label [[FOR_BODY_LR_PH:%.*]]
; CHECK: for.body.lr.ph:
-; CHECK-NEXT: [[ADDR_PROMOTED:%.*]] = load i32, i32* [[ADDR]], align 4
+; CHECK-NEXT: [[ADDR_PROMOTED:%.*]] = load i32, ptr [[MEM]], align 4
; CHECK-NEXT: br label [[FOR_HEADER:%.*]]
; CHECK: for.header:
; CHECK-NEXT: [[NEW1:%.*]] = phi i32 [ [[ADDR_PROMOTED]], [[FOR_BODY_LR_PH]] ], [ [[NEW:%.*]], [[FOR_BODY:%.*]] ]
; CHECK-NEXT: [[I_02:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
-; CHECK-NEXT: [[GUARD:%.*]] = load atomic i8*, i8** @p monotonic, align 8
-; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq i8* [[GUARD]], null
+; CHECK-NEXT: [[GUARD:%.*]] = load atomic ptr, ptr @p monotonic, align 8
+; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq ptr [[GUARD]], null
; CHECK-NEXT: br i1 [[EXITCMP]], label [[FOR_BODY]], label [[EARLY_EXIT:%.*]]
; CHECK: early-exit:
; CHECK-NEXT: [[NEW1_LCSSA:%.*]] = phi i32 [ [[NEW1]], [[FOR_HEADER]] ]
-; CHECK-NEXT: store i32 [[NEW1_LCSSA]], i32* [[ADDR]], align 4
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: store i32 [[NEW1_LCSSA]], ptr [[MEM]], align 4
+; CHECK-NEXT: ret ptr null
; CHECK: for.body:
; CHECK-NEXT: [[NEW]] = add i32 [[NEW1]], 1
; CHECK-NEXT: [[INC]] = add nsw i32 [[I_02]], 1
@@ -39,14 +38,13 @@ define i32* @test(i32 %n) {
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_HEADER]], label [[FOR_COND_FOR_END_CRIT_EDGE:%.*]]
; CHECK: for.cond.for.end_crit_edge:
; CHECK-NEXT: [[NEW_LCSSA:%.*]] = phi i32 [ [[NEW]], [[FOR_BODY]] ]
-; CHECK-NEXT: [[SPLIT:%.*]] = phi i32* [ [[ADDR]], [[FOR_BODY]] ]
-; CHECK-NEXT: store i32 [[NEW_LCSSA]], i32* [[ADDR]], align 4
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: [[SPLIT:%.*]] = phi ptr [ [[MEM]], [[FOR_BODY]] ]
+; CHECK-NEXT: store i32 [[NEW_LCSSA]], ptr [[MEM]], align 4
+; CHECK-NEXT: ret ptr null
;
entry:
;; ignore the required null check for simplicity
- %mem = call dereferenceable(16) noalias i8* @malloc(i64 16)
- %addr = bitcast i8* %mem to i32*
+ %mem = call dereferenceable(16) noalias ptr @malloc(i64 16)
br label %for.body.lr.ph
for.body.lr.ph: ; preds = %entry
@@ -54,47 +52,46 @@ for.body.lr.ph: ; preds = %entry
for.header:
%i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
- %old = load i32, i32* %addr, align 4
+ %old = load i32, ptr %mem, align 4
; deliberate impossible to analyze branch
- %guard = load atomic i8*, i8** @p monotonic, align 8
- %exitcmp = icmp eq i8* %guard, null
+ %guard = load atomic ptr, ptr @p monotonic, align 8
+ %exitcmp = icmp eq ptr %guard, null
br i1 %exitcmp, label %for.body, label %early-exit
early-exit:
- ret i32* null
+ ret ptr null
for.body:
%new = add i32 %old, 1
- store i32 %new, i32* %addr, align 4
+ store i32 %new, ptr %mem, align 4
%inc = add nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.header, label %for.cond.for.end_crit_edge
for.cond.for.end_crit_edge: ; preds = %for.body
- %split = phi i32* [ %addr, %for.body ]
- ret i32* null
+ %split = phi ptr [ %mem, %for.body ]
+ ret ptr null
}
; Stack allocations can also be thread-local
-define i32* @test2(i32 %n) {
+define ptr @test2(i32 %n) {
; CHECK-LABEL: @test2(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[MEM:%.*]] = alloca i8, i32 16, align 1
-; CHECK-NEXT: [[ADDR:%.*]] = bitcast i8* [[MEM]] to i32*
; CHECK-NEXT: br label [[FOR_BODY_LR_PH:%.*]]
; CHECK: for.body.lr.ph:
-; CHECK-NEXT: [[ADDR_PROMOTED:%.*]] = load i32, i32* [[ADDR]], align 4
+; CHECK-NEXT: [[ADDR_PROMOTED:%.*]] = load i32, ptr [[MEM]], align 4
; CHECK-NEXT: br label [[FOR_HEADER:%.*]]
; CHECK: for.header:
; CHECK-NEXT: [[NEW1:%.*]] = phi i32 [ [[ADDR_PROMOTED]], [[FOR_BODY_LR_PH]] ], [ [[NEW:%.*]], [[FOR_BODY:%.*]] ]
; CHECK-NEXT: [[I_02:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
-; CHECK-NEXT: [[GUARD:%.*]] = load atomic i8*, i8** @p monotonic, align 8
-; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq i8* [[GUARD]], null
+; CHECK-NEXT: [[GUARD:%.*]] = load atomic ptr, ptr @p monotonic, align 8
+; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq ptr [[GUARD]], null
; CHECK-NEXT: br i1 [[EXITCMP]], label [[FOR_BODY]], label [[EARLY_EXIT:%.*]]
; CHECK: early-exit:
; CHECK-NEXT: [[NEW1_LCSSA:%.*]] = phi i32 [ [[NEW1]], [[FOR_HEADER]] ]
-; CHECK-NEXT: store i32 [[NEW1_LCSSA]], i32* [[ADDR]], align 4
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: store i32 [[NEW1_LCSSA]], ptr [[MEM]], align 4
+; CHECK-NEXT: ret ptr null
; CHECK: for.body:
; CHECK-NEXT: [[NEW]] = add i32 [[NEW1]], 1
; CHECK-NEXT: [[INC]] = add nsw i32 [[I_02]], 1
@@ -102,13 +99,12 @@ define i32* @test2(i32 %n) {
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_HEADER]], label [[FOR_COND_FOR_END_CRIT_EDGE:%.*]]
; CHECK: for.cond.for.end_crit_edge:
; CHECK-NEXT: [[NEW_LCSSA:%.*]] = phi i32 [ [[NEW]], [[FOR_BODY]] ]
-; CHECK-NEXT: [[SPLIT:%.*]] = phi i32* [ [[ADDR]], [[FOR_BODY]] ]
-; CHECK-NEXT: store i32 [[NEW_LCSSA]], i32* [[ADDR]], align 4
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: [[SPLIT:%.*]] = phi ptr [ [[MEM]], [[FOR_BODY]] ]
+; CHECK-NEXT: store i32 [[NEW_LCSSA]], ptr [[MEM]], align 4
+; CHECK-NEXT: ret ptr null
;
entry:
%mem = alloca i8, i32 16
- %addr = bitcast i8* %mem to i32*
br label %for.body.lr.ph
for.body.lr.ph: ; preds = %entry
@@ -116,49 +112,48 @@ for.body.lr.ph: ; preds = %entry
for.header:
%i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
- %old = load i32, i32* %addr, align 4
+ %old = load i32, ptr %mem, align 4
; deliberate impossible to analyze branch
- %guard = load atomic i8*, i8** @p monotonic, align 8
- %exitcmp = icmp eq i8* %guard, null
+ %guard = load atomic ptr, ptr @p monotonic, align 8
+ %exitcmp = icmp eq ptr %guard, null
br i1 %exitcmp, label %for.body, label %early-exit
early-exit:
- ret i32* null
+ ret ptr null
for.body:
%new = add i32 %old, 1
- store i32 %new, i32* %addr, align 4
+ store i32 %new, ptr %mem, align 4
%inc = add nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.header, label %for.cond.for.end_crit_edge
for.cond.for.end_crit_edge: ; preds = %for.body
- %split = phi i32* [ %addr, %for.body ]
- ret i32* null
+ %split = phi ptr [ %mem, %for.body ]
+ ret ptr null
}
-declare noalias i8* @custom_malloc(i64)
+declare noalias ptr @custom_malloc(i64)
; Custom allocation function marked via noalias.
-define i32* @test_custom_malloc(i32 %n) {
+define ptr @test_custom_malloc(i32 %n) {
; CHECK-LABEL: @test_custom_malloc(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[MEM:%.*]] = call noalias dereferenceable(16) i8* @custom_malloc(i64 16)
-; CHECK-NEXT: [[ADDR:%.*]] = bitcast i8* [[MEM]] to i32*
+; CHECK-NEXT: [[MEM:%.*]] = call noalias dereferenceable(16) ptr @custom_malloc(i64 16)
; CHECK-NEXT: br label [[FOR_BODY_LR_PH:%.*]]
; CHECK: for.body.lr.ph:
-; CHECK-NEXT: [[ADDR_PROMOTED:%.*]] = load i32, i32* [[ADDR]], align 4
+; CHECK-NEXT: [[ADDR_PROMOTED:%.*]] = load i32, ptr [[MEM]], align 4
; CHECK-NEXT: br label [[FOR_HEADER:%.*]]
; CHECK: for.header:
; CHECK-NEXT: [[NEW1:%.*]] = phi i32 [ [[ADDR_PROMOTED]], [[FOR_BODY_LR_PH]] ], [ [[NEW:%.*]], [[FOR_BODY:%.*]] ]
; CHECK-NEXT: [[I_02:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
-; CHECK-NEXT: [[GUARD:%.*]] = load volatile i8*, i8** @p, align 8
-; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq i8* [[GUARD]], null
+; CHECK-NEXT: [[GUARD:%.*]] = load volatile ptr, ptr @p, align 8
+; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq ptr [[GUARD]], null
; CHECK-NEXT: br i1 [[EXITCMP]], label [[FOR_BODY]], label [[EARLY_EXIT:%.*]]
; CHECK: early-exit:
; CHECK-NEXT: [[NEW1_LCSSA:%.*]] = phi i32 [ [[NEW1]], [[FOR_HEADER]] ]
-; CHECK-NEXT: store i32 [[NEW1_LCSSA]], i32* [[ADDR]], align 4
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: store i32 [[NEW1_LCSSA]], ptr [[MEM]], align 4
+; CHECK-NEXT: ret ptr null
; CHECK: for.body:
; CHECK-NEXT: [[NEW]] = add i32 [[NEW1]], 1
; CHECK-NEXT: [[INC]] = add nsw i32 [[I_02]], 1
@@ -166,13 +161,12 @@ define i32* @test_custom_malloc(i32 %n) {
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_HEADER]], label [[FOR_COND_FOR_END_CRIT_EDGE:%.*]]
; CHECK: for.cond.for.end_crit_edge:
; CHECK-NEXT: [[NEW_LCSSA:%.*]] = phi i32 [ [[NEW]], [[FOR_BODY]] ]
-; CHECK-NEXT: [[SPLIT:%.*]] = phi i32* [ [[ADDR]], [[FOR_BODY]] ]
-; CHECK-NEXT: store i32 [[NEW_LCSSA]], i32* [[ADDR]], align 4
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: [[SPLIT:%.*]] = phi ptr [ [[MEM]], [[FOR_BODY]] ]
+; CHECK-NEXT: store i32 [[NEW_LCSSA]], ptr [[MEM]], align 4
+; CHECK-NEXT: ret ptr null
;
entry:
- %mem = call dereferenceable(16) noalias i8* @custom_malloc(i64 16)
- %addr = bitcast i8* %mem to i32*
+ %mem = call dereferenceable(16) noalias ptr @custom_malloc(i64 16)
br label %for.body.lr.ph
for.body.lr.ph: ; preds = %entry
@@ -180,60 +174,58 @@ for.body.lr.ph: ; preds = %entry
for.header:
%i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
- %old = load i32, i32* %addr, align 4
+ %old = load i32, ptr %mem, align 4
; deliberate impossible to analyze branch
- %guard = load volatile i8*, i8** @p
- %exitcmp = icmp eq i8* %guard, null
+ %guard = load volatile ptr, ptr @p
+ %exitcmp = icmp eq ptr %guard, null
br i1 %exitcmp, label %for.body, label %early-exit
early-exit:
- ret i32* null
+ ret ptr null
for.body:
%new = add i32 %old, 1
- store i32 %new, i32* %addr, align 4
+ store i32 %new, ptr %mem, align 4
%inc = add nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.header, label %for.cond.for.end_crit_edge
for.cond.for.end_crit_edge: ; preds = %for.body
- %split = phi i32* [ %addr, %for.body ]
- ret i32* null
+ %split = phi ptr [ %mem, %for.body ]
+ ret ptr null
}
-declare i8* @not_malloc(i64)
+declare ptr @not_malloc(i64)
; Negative test - not an allocation function.
-define i32* @test_neg_not_malloc(i32 %n) {
+define ptr @test_neg_not_malloc(i32 %n) {
; CHECK-LABEL: @test_neg_not_malloc(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[MEM:%.*]] = call dereferenceable(16) i8* @not_malloc(i64 16)
-; CHECK-NEXT: [[ADDR:%.*]] = bitcast i8* [[MEM]] to i32*
+; CHECK-NEXT: [[MEM:%.*]] = call dereferenceable(16) ptr @not_malloc(i64 16)
; CHECK-NEXT: br label [[FOR_BODY_LR_PH:%.*]]
; CHECK: for.body.lr.ph:
; CHECK-NEXT: br label [[FOR_HEADER:%.*]]
; CHECK: for.header:
; CHECK-NEXT: [[I_02:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INC:%.*]], [[FOR_BODY:%.*]] ]
-; CHECK-NEXT: [[OLD:%.*]] = load i32, i32* [[ADDR]], align 4
-; CHECK-NEXT: [[GUARD:%.*]] = load volatile i8*, i8** @p, align 8
-; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq i8* [[GUARD]], null
+; CHECK-NEXT: [[OLD:%.*]] = load i32, ptr [[MEM]], align 4
+; CHECK-NEXT: [[GUARD:%.*]] = load volatile ptr, ptr @p, align 8
+; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq ptr [[GUARD]], null
; CHECK-NEXT: br i1 [[EXITCMP]], label [[FOR_BODY]], label [[EARLY_EXIT:%.*]]
; CHECK: early-exit:
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: ret ptr null
; CHECK: for.body:
; CHECK-NEXT: [[NEW:%.*]] = add i32 [[OLD]], 1
-; CHECK-NEXT: store i32 [[NEW]], i32* [[ADDR]], align 4
+; CHECK-NEXT: store i32 [[NEW]], ptr [[MEM]], align 4
; CHECK-NEXT: [[INC]] = add nsw i32 [[I_02]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[INC]], [[N:%.*]]
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_HEADER]], label [[FOR_COND_FOR_END_CRIT_EDGE:%.*]]
; CHECK: for.cond.for.end_crit_edge:
-; CHECK-NEXT: [[SPLIT:%.*]] = phi i32* [ [[ADDR]], [[FOR_BODY]] ]
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: [[SPLIT:%.*]] = phi ptr [ [[MEM]], [[FOR_BODY]] ]
+; CHECK-NEXT: ret ptr null
;
entry:
;; ignore the required null check for simplicity
- %mem = call dereferenceable(16) i8* @not_malloc(i64 16)
- %addr = bitcast i8* %mem to i32*
+ %mem = call dereferenceable(16) ptr @not_malloc(i64 16)
br label %for.body.lr.ph
for.body.lr.ph: ; preds = %entry
@@ -241,59 +233,57 @@ for.body.lr.ph: ; preds = %entry
for.header:
%i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
- %old = load i32, i32* %addr, align 4
+ %old = load i32, ptr %mem, align 4
; deliberate impossible to analyze branch
- %guard = load volatile i8*, i8** @p
- %exitcmp = icmp eq i8* %guard, null
+ %guard = load volatile ptr, ptr @p
+ %exitcmp = icmp eq ptr %guard, null
br i1 %exitcmp, label %for.body, label %early-exit
early-exit:
- ret i32* null
+ ret ptr null
for.body:
%new = add i32 %old, 1
- store i32 %new, i32* %addr, align 4
+ store i32 %new, ptr %mem, align 4
%inc = add nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.header, label %for.cond.for.end_crit_edge
for.cond.for.end_crit_edge: ; preds = %for.body
- %split = phi i32* [ %addr, %for.body ]
- ret i32* null
+ %split = phi ptr [ %mem, %for.body ]
+ ret ptr null
}
; Negative test - can't speculate load since branch
; may control alignment
-define i32* @test_neg2(i32 %n) {
+define ptr @test_neg2(i32 %n) {
; CHECK-LABEL: @test_neg2(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[MEM:%.*]] = call noalias dereferenceable(16) i8* @malloc(i64 16)
-; CHECK-NEXT: [[ADDR:%.*]] = bitcast i8* [[MEM]] to i32*
+; CHECK-NEXT: [[MEM:%.*]] = call noalias dereferenceable(16) ptr @malloc(i64 16)
; CHECK-NEXT: br label [[FOR_BODY_LR_PH:%.*]]
; CHECK: for.body.lr.ph:
; CHECK-NEXT: br label [[FOR_HEADER:%.*]]
; CHECK: for.header:
; CHECK-NEXT: [[I_02:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INC:%.*]], [[FOR_BODY:%.*]] ]
-; CHECK-NEXT: [[GUARD:%.*]] = load volatile i8*, i8** @p, align 8
-; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq i8* [[GUARD]], null
+; CHECK-NEXT: [[GUARD:%.*]] = load volatile ptr, ptr @p, align 8
+; CHECK-NEXT: [[EXITCMP:%.*]] = icmp eq ptr [[GUARD]], null
; CHECK-NEXT: br i1 [[EXITCMP]], label [[FOR_BODY]], label [[EARLY_EXIT:%.*]]
; CHECK: early-exit:
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: ret ptr null
; CHECK: for.body:
-; CHECK-NEXT: [[OLD:%.*]] = load i32, i32* [[ADDR]], align 4
+; CHECK-NEXT: [[OLD:%.*]] = load i32, ptr [[MEM]], align 4
; CHECK-NEXT: [[NEW:%.*]] = add i32 [[OLD]], 1
-; CHECK-NEXT: store i32 [[NEW]], i32* [[ADDR]], align 4
+; CHECK-NEXT: store i32 [[NEW]], ptr [[MEM]], align 4
; CHECK-NEXT: [[INC]] = add nsw i32 [[I_02]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[INC]], [[N:%.*]]
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_HEADER]], label [[FOR_COND_FOR_END_CRIT_EDGE:%.*]]
; CHECK: for.cond.for.end_crit_edge:
-; CHECK-NEXT: [[SPLIT:%.*]] = phi i32* [ [[ADDR]], [[FOR_BODY]] ]
-; CHECK-NEXT: ret i32* null
+; CHECK-NEXT: [[SPLIT:%.*]] = phi ptr [ [[MEM]], [[FOR_BODY]] ]
+; CHECK-NEXT: ret ptr null
;
entry:
;; ignore the required null check for simplicity
- %mem = call dereferenceable(16) noalias i8* @malloc(i64 16)
- %addr = bitcast i8* %mem to i32*
+ %mem = call dereferenceable(16) noalias ptr @malloc(i64 16)
br label %for.body.lr.ph
for.body.lr.ph: ; preds = %entry
@@ -302,22 +292,22 @@ for.body.lr.ph: ; preds = %entry
for.header:
%i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
; deliberate impossible to analyze branch
- %guard = load volatile i8*, i8** @p
- %exitcmp = icmp eq i8* %guard, null
+ %guard = load volatile ptr, ptr @p
+ %exitcmp = icmp eq ptr %guard, null
br i1 %exitcmp, label %for.body, label %early-exit
early-exit:
- ret i32* null
+ ret ptr null
for.body:
- %old = load i32, i32* %addr, align 4
+ %old = load i32, ptr %mem, align 4
%new = add i32 %old, 1
- store i32 %new, i32* %addr, align 4
+ store i32 %new, ptr %mem, align 4
%inc = add nsw i32 %i.02, 1
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.header, label %for.cond.for.end_crit_edge
for.cond.for.end_crit_edge: ; preds = %for.body
- %split = phi i32* [ %addr, %for.body ]
- ret i32* null
+ %split = phi ptr [ %mem, %for.body ]
+ ret ptr null
}
diff --git a/llvm/test/Transforms/LICM/read-only-calls.ll b/llvm/test/Transforms/LICM/read-only-calls.ll
index a947f5156a412..6214e45160425 100644
--- a/llvm/test/Transforms/LICM/read-only-calls.ll
+++ b/llvm/test/Transforms/LICM/read-only-calls.ll
@@ -8,60 +8,60 @@
; This prevents hoisting load that doesn't alias with any other memory
; operations.
-declare void @foo(i64, i32*) readonly
+declare void @foo(i64, ptr) readonly
; hoist the load out with the n2-threshold
; since it doesn't alias with the store.
; default AST mechanism clumps all memory locations in one set because of the
; readonly call
-define void @test1(i32* %ptr) {
+define void @test1(ptr %ptr) {
; CHECK-LABEL: @test1(
; CHECK-LABEL: entry:
-; CHECK: %val = load i32, i32* %ptr
+; CHECK: %val = load i32, ptr %ptr
; CHECK-LABEL: loop:
entry:
br label %loop
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- %val = load i32, i32* %ptr
- call void @foo(i64 4, i32* %ptr)
- %p2 = getelementptr i32, i32* %ptr, i32 1
- store volatile i32 0, i32* %p2
+ %val = load i32, ptr %ptr
+ call void @foo(i64 4, ptr %ptr)
+ %p2 = getelementptr i32, ptr %ptr, i32 1
+ store volatile i32 0, ptr %p2
%x.inc = add i32 %x, %val
br label %loop
}
; can hoist out load with the default AST and the alias analysis mechanism.
-define void @test2(i32* %ptr) {
+define void @test2(ptr %ptr) {
; CHECK-LABEL: @test2(
; CHECK-LABEL: entry:
-; CHECK: %val = load i32, i32* %ptr
+; CHECK: %val = load i32, ptr %ptr
; CHECK-LABEL: loop:
entry:
br label %loop
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- %val = load i32, i32* %ptr
- call void @foo(i64 4, i32* %ptr)
+ %val = load i32, ptr %ptr
+ call void @foo(i64 4, ptr %ptr)
%x.inc = add i32 %x, %val
br label %loop
}
; cannot hoist load since not guaranteed to execute
-define void @test3(i32* %ptr) {
+define void @test3(ptr %ptr) {
; CHECK-LABEL: @test3(
; CHECK-LABEL: entry:
; CHECK-LABEL: loop:
-; CHECK: %val = load i32, i32* %ptr
+; CHECK: %val = load i32, ptr %ptr
entry:
br label %loop
loop:
%x = phi i32 [ 0, %entry ], [ %x.inc, %loop ]
- call void @foo(i64 4, i32* %ptr)
- %val = load i32, i32* %ptr
+ call void @foo(i64 4, ptr %ptr)
+ %val = load i32, ptr %ptr
%x.inc = add i32 %x, %val
br label %loop
}
diff --git a/llvm/test/Transforms/LICM/scalar-promote-memmodel.ll b/llvm/test/Transforms/LICM/scalar-promote-memmodel.ll
index 33076b39e908b..2a6e8d35f40f5 100644
--- a/llvm/test/Transforms/LICM/scalar-promote-memmodel.ll
+++ b/llvm/test/Transforms/LICM/scalar-promote-memmodel.ll
@@ -11,7 +11,7 @@ define void @bar(i32 %n, i32 %b) nounwind uwtable ssp {
; CHECK-LABEL: @bar(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i32 [[B:%.*]], 0
-; CHECK-NEXT: [[G_PROMOTED:%.*]] = load i32, i32* @g, align 4
+; CHECK-NEXT: [[G_PROMOTED:%.*]] = load i32, ptr @g, align 4
; CHECK-NEXT: br label [[FOR_COND:%.*]]
; CHECK: for.cond:
; CHECK-NEXT: [[INC2:%.*]] = phi i32 [ [[G_PROMOTED]], [[ENTRY:%.*]] ], [ [[INC1:%.*]], [[FOR_INC:%.*]] ]
@@ -22,7 +22,7 @@ define void @bar(i32 %n, i32 %b) nounwind uwtable ssp {
; CHECK-NEXT: br i1 [[TOBOOL]], label [[FOR_INC]], label [[IF_THEN:%.*]]
; CHECK: if.then:
; CHECK-NEXT: [[INC:%.*]] = add nsw i32 [[INC2]], 1
-; CHECK-NEXT: store i32 [[INC]], i32* @g, align 4
+; CHECK-NEXT: store i32 [[INC]], ptr @g, align 4
; CHECK-NEXT: br label [[FOR_INC]]
; CHECK: for.inc:
; CHECK-NEXT: [[INC1]] = phi i32 [ [[INC]], [[IF_THEN]] ], [ [[INC2]], [[FOR_BODY]] ]
@@ -44,9 +44,9 @@ for.body: ; preds = %for.cond
br i1 %tobool, label %for.inc, label %if.then
if.then: ; preds = %for.body
- %tmp3 = load i32, i32* @g, align 4
+ %tmp3 = load i32, ptr @g, align 4
%inc = add nsw i32 %tmp3, 1
- store i32 %inc, i32* @g, align 4
+ store i32 %inc, ptr @g, align 4
br label %for.inc
diff --git a/llvm/test/Transforms/LICM/scalar-promote-opaque-ptrs.ll b/llvm/test/Transforms/LICM/scalar-promote-opaque-ptrs.ll
index b239b6fb02960..64bbd4fa2800b 100644
--- a/llvm/test/Transforms/LICM/scalar-promote-opaque-ptrs.ll
+++ b/llvm/test/Transforms/LICM/scalar-promote-opaque-ptrs.ll
@@ -2,7 +2,7 @@
; RUN: opt -passes=licm -opaque-pointers -S %s | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
- at X = global i32 7 ; <i32*> [#uses=4]
+ at X = global i32 7 ; <ptr> [#uses=4]
define void @test1(i32 %i) {
; CHECK-LABEL: @test1(
@@ -26,9 +26,9 @@ Entry:
Loop: ; preds = %Loop, %0
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ] ; <i32> [#uses=1]
- %x = load i32, i32* @X ; <i32> [#uses=1]
+ %x = load i32, ptr @X ; <i32> [#uses=1]
%x2 = add i32 %x, 1 ; <i32> [#uses=1]
- store i32 %x2, i32* @X
+ store i32 %x2, ptr @X
%Next = add i32 %j, 1 ; <i32> [#uses=2]
%cond = icmp eq i32 %Next, 0 ; <i1> [#uses=1]
br i1 %cond, label %Out, label %Loop
@@ -55,11 +55,11 @@ Entry:
br label %Loop
Loop: ; preds = %Loop, %0
- %X1 = getelementptr i32, i32* @X, i64 1 ; <i32*> [#uses=1]
- %A = load i32, i32* %X1 ; <i32> [#uses=1]
+ %X1 = getelementptr i32, ptr @X, i64 1 ; <ptr> [#uses=1]
+ %A = load i32, ptr %X1 ; <i32> [#uses=1]
%V = add i32 %A, 1 ; <i32> [#uses=1]
- %X2 = getelementptr i32, i32* @X, i64 1 ; <i32*> [#uses=1]
- store i32 %V, i32* %X2
+ %X2 = getelementptr i32, ptr @X, i64 1 ; <ptr> [#uses=1]
+ store i32 %V, ptr %X2
br i1 false, label %Loop, label %Exit
Exit: ; preds = %Loop
@@ -80,9 +80,9 @@ define void @test3(i32 %i) {
br label %Loop
Loop:
; Should not promote this to a register
- %x = load volatile i32, i32* @X
+ %x = load volatile i32, ptr @X
%x2 = add i32 %x, 1
- store i32 %x2, i32* @X
+ store i32 %x2, ptr @X
br i1 true, label %Out, label %Loop
Out: ; preds = %Loop
@@ -103,9 +103,9 @@ define void @test3b(i32 %i) {
;
br label %Loop
Loop:
- %x = load i32, i32* @X
+ %x = load i32, ptr @X
%x2 = add i32 %x, 1
- store volatile i32 %x2, i32* @X
+ store volatile i32 %x2, ptr @X
br i1 true, label %Out, label %Loop
Out: ; preds = %Loop
@@ -115,7 +115,7 @@ Out: ; preds = %Loop
; PR8041
; Should have promoted 'handle2' accesses.
; Should not have promoted offsetx1 loads.
-define void @test4(i8* %x, i8 %n) {
+define void @test4(ptr %x, i8 %n) {
; CHECK-LABEL: @test4(
; CHECK-NEXT: [[HANDLE1:%.*]] = alloca ptr, align 8
; CHECK-NEXT: [[HANDLE2:%.*]] = alloca ptr, align 8
@@ -143,29 +143,29 @@ define void @test4(i8* %x, i8 %n) {
; CHECK-NEXT: store ptr [[NEWOFFSETX2_LCSSA_LCSSA]], ptr [[HANDLE2]], align 8
; CHECK-NEXT: ret void
;
- %handle1 = alloca i8*
- %handle2 = alloca i8*
- store i8* %x, i8** %handle1
+ %handle1 = alloca ptr
+ %handle2 = alloca ptr
+ store ptr %x, ptr %handle1
br label %loop
loop:
- %tmp = getelementptr i8, i8* %x, i64 8
- store i8* %tmp, i8** %handle2
+ %tmp = getelementptr i8, ptr %x, i64 8
+ store ptr %tmp, ptr %handle2
br label %subloop
subloop:
%count = phi i8 [ 0, %loop ], [ %nextcount, %subloop ]
- %offsetx2 = load i8*, i8** %handle2
- store i8 %n, i8* %offsetx2
- %newoffsetx2 = getelementptr i8, i8* %offsetx2, i64 -1
- store i8* %newoffsetx2, i8** %handle2
+ %offsetx2 = load ptr, ptr %handle2
+ store i8 %n, ptr %offsetx2
+ %newoffsetx2 = getelementptr i8, ptr %offsetx2, i64 -1
+ store ptr %newoffsetx2, ptr %handle2
%nextcount = add i8 %count, 1
%innerexitcond = icmp sge i8 %nextcount, 8
br i1 %innerexitcond, label %innerexit, label %subloop
innerexit:
- %offsetx1 = load i8*, i8** %handle1
- %val = load i8, i8* %offsetx1
+ %offsetx1 = load ptr, ptr %handle1
+ %val = load i8, ptr %offsetx1
%cond = icmp eq i8 %val, %n
br i1 %cond, label %exit, label %loop
@@ -173,7 +173,7 @@ exit:
ret void
}
-define void @test5(i32 %i, i32** noalias %P2) {
+define void @test5(i32 %i, ptr noalias %P2) {
; CHECK-LABEL: @test5(
; CHECK-NEXT: Entry:
; CHECK-NEXT: [[X_PROMOTED:%.*]] = load i32, ptr @X, align 4
@@ -196,11 +196,11 @@ Entry:
Loop: ; preds = %Loop, %0
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ] ; <i32> [#uses=1]
- %x = load i32, i32* @X ; <i32> [#uses=1]
+ %x = load i32, ptr @X ; <i32> [#uses=1]
%x2 = add i32 %x, 1 ; <i32> [#uses=1]
- store i32 %x2, i32* @X
+ store i32 %x2, ptr @X
- store atomic i32* @X, i32** %P2 monotonic, align 8
+ store atomic ptr @X, ptr %P2 monotonic, align 8
%Next = add i32 %j, 1 ; <i32> [#uses=2]
%cond = icmp eq i32 %Next, 0 ; <i1> [#uses=1]
@@ -213,7 +213,7 @@ Out:
; PR14753 - Preserve TBAA tags when promoting values in a loop.
-define void @test6(i32 %n, float* nocapture %a, i32* %gi) {
+define void @test6(i32 %n, ptr nocapture %a, ptr %gi) {
; CHECK-LABEL: @test6(
; CHECK-NEXT: entry:
; CHECK-NEXT: store i32 0, ptr [[GI:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
@@ -239,7 +239,7 @@ define void @test6(i32 %n, float* nocapture %a, i32* %gi) {
; CHECK-NEXT: ret void
;
entry:
- store i32 0, i32* %gi, align 4, !tbaa !0
+ store i32 0, ptr %gi, align 4, !tbaa !0
%cmp1 = icmp slt i32 0, %n
br i1 %cmp1, label %for.body.lr.ph, label %for.end
@@ -249,11 +249,11 @@ for.body.lr.ph: ; preds = %entry
for.body: ; preds = %for.body.lr.ph, %for.body
%storemerge2 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
%idxprom = sext i32 %storemerge2 to i64
- %arrayidx = getelementptr inbounds float, float* %a, i64 %idxprom
- store float 0.000000e+00, float* %arrayidx, align 4, !tbaa !3
- %0 = load i32, i32* %gi, align 4, !tbaa !0
+ %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom
+ store float 0.000000e+00, ptr %arrayidx, align 4, !tbaa !3
+ %0 = load i32, ptr %gi, align 4, !tbaa !0
%inc = add nsw i32 %0, 1
- store i32 %inc, i32* %gi, align 4, !tbaa !0
+ store i32 %inc, ptr %gi, align 4, !tbaa !0
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge
@@ -266,7 +266,7 @@ for.end: ; preds = %for.cond.for.end_cr
}
declare i32 @opaque(i32) argmemonly
-declare void @capture(i32*)
+declare void @capture(ptr)
; We can promote even if opaque may throw.
define i32 @test7() {
@@ -291,20 +291,20 @@ define i32 @test7() {
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
+ call void @capture(ptr %local)
br label %loop
loop:
%j = phi i32 [ 0, %entry ], [ %next, %loop ]
- %x = load i32, i32* %local
+ %x = load i32, ptr %local
%x2 = call i32 @opaque(i32 %x) ; Note this does not capture %local
- store i32 %x2, i32* %local
+ store i32 %x2, ptr %local
%next = add i32 %j, 1
%cond = icmp eq i32 %next, 0
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %local
+ %ret = load i32, ptr %local
ret i32 %ret
}
@@ -336,17 +336,17 @@ define i32 @test7bad() {
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
+ call void @capture(ptr %local)
br label %loop
loop:
%j = phi i32 [ 0, %entry ], [ %next, %else ]
- %x = load i32, i32* %local
+ %x = load i32, ptr %local
%x2 = call i32 @opaque(i32 %x) ; Note this does not capture %local
%cmp = icmp eq i32 %x2, 0
br i1 %cmp, label %if, label %else
if:
- store i32 %x2, i32* %local
+ store i32 %x2, ptr %local
br label %else
else:
@@ -355,7 +355,7 @@ else:
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %local
+ %ret = load i32, ptr %local
ret i32 %ret
}
@@ -385,21 +385,21 @@ define i32 @test8() {
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
+ call void @capture(ptr %local)
br label %loop
loop:
%j = phi i32 [ 0, %entry ], [ %next, %loop ]
%throwaway = call i32 @opaque(i32 %j)
- %x = load i32, i32* %local
+ %x = load i32, ptr %local
%x2 = call i32 @opaque(i32 %x)
- store i32 %x2, i32* %local
+ store i32 %x2, ptr %local
%next = add i32 %j, 1
%cond = icmp eq i32 %next, 0
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %local
+ %ret = load i32, ptr %local
ret i32 %ret
}
@@ -435,7 +435,7 @@ define i32 @test9() {
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
+ call void @capture(ptr %local)
br label %loop
loop:
@@ -445,18 +445,18 @@ loop:
br i1 %cmp, label %if, label %else
if:
- %x = load i32, i32* %local
+ %x = load i32, ptr %local
br label %else
else:
%x2 = phi i32 [ 0, %loop ], [ %x, %if]
- store i32 %x2, i32* %local
+ store i32 %x2, ptr %local
%next = add i32 %j, 1
%cond = icmp eq i32 %next, 0
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %local
+ %ret = load i32, ptr %local
ret i32 %ret
}
@@ -487,8 +487,8 @@ define i32 @test9bad(i32 %i) {
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
- %notderef = getelementptr i32, i32* %local, i32 %i
+ call void @capture(ptr %local)
+ %notderef = getelementptr i32, ptr %local, i32 %i
br label %loop
loop:
@@ -498,18 +498,18 @@ loop:
br i1 %cmp, label %if, label %else
if:
- %x = load i32, i32* %notderef
+ %x = load i32, ptr %notderef
br label %else
else:
%x2 = phi i32 [ 0, %loop ], [ %x, %if]
- store i32 %x2, i32* %notderef
+ store i32 %x2, ptr %notderef
%next = add i32 %j, 1
%cond = icmp eq i32 %next, 0
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %notderef
+ %ret = load i32, ptr %notderef
ret i32 %ret
}
@@ -536,9 +536,9 @@ Entry:
Loop: ; preds = %Loop, %0
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ] ; <i32> [#uses=1]
- %x = load atomic i32, i32* @X unordered, align 4
+ %x = load atomic i32, ptr @X unordered, align 4
%x2 = add i32 %x, 1
- store atomic i32 %x2, i32* @X unordered, align 4
+ store atomic i32 %x2, ptr @X unordered, align 4
%Next = add i32 %j, 1
%cond = icmp eq i32 %Next, 0
br i1 %cond, label %Out, label %Loop
@@ -583,9 +583,9 @@ Loop: ; preds = %Loop, %0
%early.test = icmp ult i32 %j, 32
br i1 %early.test, label %body, label %Early
body:
- %x = load i32, i32* @X ; <i32> [#uses=1]
+ %x = load i32, ptr @X ; <i32> [#uses=1]
%x2 = add i32 %x, 1 ; <i32> [#uses=1]
- store i32 %x2, i32* @X
+ store i32 %x2, ptr @X
%Next = add i32 %j, 1 ; <i32> [#uses=2]
%cond = icmp eq i32 %Next, 0 ; <i1> [#uses=1]
br i1 %cond, label %Out, label %Loop
diff --git a/llvm/test/Transforms/LICM/scalar-promote-unwind.ll b/llvm/test/Transforms/LICM/scalar-promote-unwind.ll
index 4b57e4029fbf3..f50bb10a40be4 100644
--- a/llvm/test/Transforms/LICM/scalar-promote-unwind.ll
+++ b/llvm/test/Transforms/LICM/scalar-promote-unwind.ll
@@ -7,16 +7,16 @@ target triple = "x86_64-unknown-linux-gnu"
; Make sure we don't hoist the store out of the loop; %a would
; have the wrong value if f() unwinds
-define void @test1(i32* nocapture noalias %a, i1 zeroext %y) uwtable {
+define void @test1(ptr nocapture noalias %a, i1 zeroext %y) uwtable {
; CHECK-LABEL: @test1(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, i32* [[A:%.*]], align 4
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, ptr [[A:%.*]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_INC:%.*]] ]
; CHECK-NEXT: [[I_03:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INC:%.*]], [[FOR_INC]] ]
; CHECK-NEXT: [[ADD]] = add nsw i32 [[ADD1]], 1
-; CHECK-NEXT: store i32 [[ADD]], i32* [[A]], align 4
+; CHECK-NEXT: store i32 [[ADD]], ptr [[A]], align 4
; CHECK-NEXT: br i1 [[Y:%.*]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
; CHECK-NEXT: tail call void @f()
@@ -33,9 +33,9 @@ entry:
for.body:
%i.03 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
- %0 = load i32, i32* %a, align 4
+ %0 = load i32, ptr %a, align 4
%add = add nsw i32 %0, 1
- store i32 %add, i32* %a, align 4
+ store i32 %add, ptr %a, align 4
br i1 %y, label %if.then, label %for.inc
@@ -58,7 +58,7 @@ define void @test_alloca(i1 zeroext %y) uwtable {
; CHECK-LABEL: @test_alloca(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, ptr [[A]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_INC:%.*]] ]
@@ -74,7 +74,7 @@ define void @test_alloca(i1 zeroext %y) uwtable {
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]
; CHECK: for.cond.cleanup:
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_INC]] ]
-; CHECK-NEXT: store i32 [[ADD_LCSSA]], i32* [[A]], align 4
+; CHECK-NEXT: store i32 [[ADD_LCSSA]], ptr [[A]], align 4
; CHECK-NEXT: ret void
;
entry:
@@ -83,9 +83,9 @@ entry:
for.body:
%i.03 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
- %0 = load i32, i32* %a, align 4
+ %0 = load i32, ptr %a, align 4
%add = add nsw i32 %0, 1
- store i32 %add, i32* %a, align 4
+ store i32 %add, ptr %a, align 4
br i1 %y, label %if.then, label %for.inc
if.then:
@@ -102,10 +102,10 @@ for.cond.cleanup:
}
; byval memory cannot be accessed on unwind either.
-define void @test_byval(i32* byval(i32) %a, i1 zeroext %y) uwtable {
+define void @test_byval(ptr byval(i32) %a, i1 zeroext %y) uwtable {
; CHECK-LABEL: @test_byval(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, i32* [[A:%.*]], align 4
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, ptr [[A:%.*]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_INC:%.*]] ]
@@ -121,7 +121,7 @@ define void @test_byval(i32* byval(i32) %a, i1 zeroext %y) uwtable {
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]
; CHECK: for.cond.cleanup:
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_INC]] ]
-; CHECK-NEXT: store i32 [[ADD_LCSSA]], i32* [[A]], align 4
+; CHECK-NEXT: store i32 [[ADD_LCSSA]], ptr [[A]], align 4
; CHECK-NEXT: ret void
;
entry:
@@ -129,9 +129,9 @@ entry:
for.body:
%i.03 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
- %0 = load i32, i32* %a, align 4
+ %0 = load i32, ptr %a, align 4
%add = add nsw i32 %0, 1
- store i32 %add, i32* %a, align 4
+ store i32 %add, ptr %a, align 4
br i1 %y, label %if.then, label %for.inc
if.then:
@@ -148,16 +148,16 @@ for.cond.cleanup:
}
; TODO: sret could be specified to not be accessed on unwind either.
-define void @test_sret(i32* noalias sret(i32) %a, i1 zeroext %y) uwtable {
+define void @test_sret(ptr noalias sret(i32) %a, i1 zeroext %y) uwtable {
; CHECK-LABEL: @test_sret(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, i32* [[A:%.*]], align 4
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, ptr [[A:%.*]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_INC:%.*]] ]
; CHECK-NEXT: [[I_03:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INC:%.*]], [[FOR_INC]] ]
; CHECK-NEXT: [[ADD]] = add nsw i32 [[ADD1]], 1
-; CHECK-NEXT: store i32 [[ADD]], i32* [[A]], align 4
+; CHECK-NEXT: store i32 [[ADD]], ptr [[A]], align 4
; CHECK-NEXT: br i1 [[Y:%.*]], label [[IF_THEN:%.*]], label [[FOR_INC]]
; CHECK: if.then:
; CHECK-NEXT: tail call void @f()
@@ -174,9 +174,9 @@ entry:
for.body:
%i.03 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
- %0 = load i32, i32* %a, align 4
+ %0 = load i32, ptr %a, align 4
%add = add nsw i32 %0, 1
- store i32 %add, i32* %a, align 4
+ store i32 %add, ptr %a, align 4
br i1 %y, label %if.then, label %for.inc
if.then:
@@ -198,7 +198,7 @@ define void @test3(i1 zeroext %y) uwtable {
; CHECK-LABEL: @test3(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, ptr [[A]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
@@ -210,7 +210,7 @@ define void @test3(i1 zeroext %y) uwtable {
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]
; CHECK: for.cond.cleanup:
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
-; CHECK-NEXT: store i32 [[ADD_LCSSA]], i32* [[A]], align 4
+; CHECK-NEXT: store i32 [[ADD_LCSSA]], ptr [[A]], align 4
; CHECK-NEXT: ret void
;
entry:
@@ -219,10 +219,10 @@ entry:
for.body:
%i.03 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
- %0 = load i32, i32* %a, align 4
+ %0 = load i32, ptr %a, align 4
%add = add nsw i32 %0, 1
tail call void @f()
- store i32 %add, i32* %a, align 4
+ store i32 %add, ptr %a, align 4
%inc = add nuw nsw i32 %i.03, 1
%exitcond = icmp eq i32 %inc, 10000
br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -236,7 +236,7 @@ define void @test3b(i1 zeroext %y) uwtable {
; CHECK-LABEL: @test3b(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load atomic i32, i32* [[A]] unordered, align 4
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load atomic i32, ptr [[A]] unordered, align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
@@ -248,7 +248,7 @@ define void @test3b(i1 zeroext %y) uwtable {
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]
; CHECK: for.cond.cleanup:
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
-; CHECK-NEXT: store atomic i32 [[ADD_LCSSA]], i32* [[A]] unordered, align 4
+; CHECK-NEXT: store atomic i32 [[ADD_LCSSA]], ptr [[A]] unordered, align 4
; CHECK-NEXT: ret void
;
entry:
@@ -257,10 +257,10 @@ entry:
for.body:
%i.03 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
- %0 = load atomic i32, i32* %a unordered, align 4
+ %0 = load atomic i32, ptr %a unordered, align 4
%add = add nsw i32 %0, 1
tail call void @f()
- store atomic i32 %add, i32* %a unordered, align 4
+ store atomic i32 %add, ptr %a unordered, align 4
%inc = add nuw nsw i32 %i.03, 1
%exitcond = icmp eq i32 %inc, 10000
br i1 %exitcond, label %for.cond.cleanup, label %for.body
@@ -269,17 +269,17 @@ for.cond.cleanup:
ret void
}
- at _ZTIi = external constant i8*
+ at _ZTIi = external constant ptr
; In this test, the loop is within a try block. There is an explicit unwind edge out of the loop.
; Make sure this edge is treated as a loop exit, and that the loads and stores are promoted as
; expected
-define void @loop_within_tryblock() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @loop_within_tryblock() personality ptr @__gxx_personality_v0 {
; CHECK-LABEL: @loop_within_tryblock(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT: store i32 0, i32* [[A]], align 4
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT: store i32 0, ptr [[A]], align 4
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i32, ptr [[A]], align 4
; CHECK-NEXT: br label [[FOR_COND:%.*]]
; CHECK: for.cond:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_INC:%.*]] ]
@@ -297,36 +297,35 @@ define void @loop_within_tryblock() personality i8* bitcast (i32 (...)* @__gxx_p
; CHECK-NEXT: br label [[FOR_COND]]
; CHECK: lpad:
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
-; CHECK-NEXT: [[TMP0:%.*]] = landingpad { i8*, i32 }
-; CHECK-NEXT: catch i8* bitcast (i8** @_ZTIi to i8*)
-; CHECK-NEXT: store i32 [[ADD_LCSSA]], i32* [[A]], align 4
-; CHECK-NEXT: [[TMP1:%.*]] = extractvalue { i8*, i32 } [[TMP0]], 0
-; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { i8*, i32 } [[TMP0]], 1
+; CHECK-NEXT: [[TMP0:%.*]] = landingpad { ptr, i32 }
+; CHECK-NEXT: catch ptr @_ZTIi
+; CHECK-NEXT: store i32 [[ADD_LCSSA]], ptr [[A]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = extractvalue { ptr, i32 } [[TMP0]], 0
+; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { ptr, i32 } [[TMP0]], 1
; CHECK-NEXT: br label [[CATCH_DISPATCH:%.*]]
; CHECK: catch.dispatch:
-; CHECK-NEXT: [[TMP3:%.*]] = call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTIi to i8*))
+; CHECK-NEXT: [[TMP3:%.*]] = call i32 @llvm.eh.typeid.for(ptr @_ZTIi)
; CHECK-NEXT: [[MATCHES:%.*]] = icmp eq i32 [[TMP2]], [[TMP3]]
; CHECK-NEXT: br i1 [[MATCHES]], label [[CATCH:%.*]], label [[EH_RESUME:%.*]]
; CHECK: catch:
-; CHECK-NEXT: [[TMP4:%.*]] = call i8* @__cxa_begin_catch(i8* [[TMP1]])
-; CHECK-NEXT: [[TMP5:%.*]] = bitcast i8* [[TMP4]] to i32*
-; CHECK-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4
+; CHECK-NEXT: [[TMP4:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP1]])
+; CHECK-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP4]], align 4
; CHECK-NEXT: call void @__cxa_end_catch()
; CHECK-NEXT: br label [[TRY_CONT:%.*]]
; CHECK: try.cont:
; CHECK-NEXT: ret void
; CHECK: for.end:
; CHECK-NEXT: [[ADD1_LCSSA:%.*]] = phi i32 [ [[ADD1]], [[FOR_COND]] ]
-; CHECK-NEXT: store i32 [[ADD1_LCSSA]], i32* [[A]], align 4
+; CHECK-NEXT: store i32 [[ADD1_LCSSA]], ptr [[A]], align 4
; CHECK-NEXT: br label [[TRY_CONT]]
; CHECK: eh.resume:
-; CHECK-NEXT: [[LPAD_VAL:%.*]] = insertvalue { i8*, i32 } undef, i8* [[TMP1]], 0
-; CHECK-NEXT: [[LPAD_VAL3:%.*]] = insertvalue { i8*, i32 } [[LPAD_VAL]], i32 [[TMP2]], 1
-; CHECK-NEXT: resume { i8*, i32 } [[LPAD_VAL3]]
+; CHECK-NEXT: [[LPAD_VAL:%.*]] = insertvalue { ptr, i32 } undef, ptr [[TMP1]], 0
+; CHECK-NEXT: [[LPAD_VAL3:%.*]] = insertvalue { ptr, i32 } [[LPAD_VAL]], i32 [[TMP2]], 1
+; CHECK-NEXT: resume { ptr, i32 } [[LPAD_VAL3]]
;
entry:
%a = alloca i32, align 4
- store i32 0, i32* %a, align 4
+ store i32 0, ptr %a, align 4
br label %for.cond
for.cond:
@@ -335,9 +334,9 @@ for.cond:
br i1 %cmp, label %for.body, label %for.end
for.body:
- %0 = load i32, i32* %a, align 4
+ %0 = load i32, ptr %a, align 4
%add = add nsw i32 %0, 1
- store i32 %add, i32* %a, align 4
+ store i32 %add, ptr %a, align 4
invoke void @boo()
to label %invoke.cont unwind label %lpad
@@ -349,21 +348,20 @@ for.inc:
br label %for.cond
lpad:
- %1 = landingpad { i8*, i32 }
- catch i8* bitcast (i8** @_ZTIi to i8*)
- %2 = extractvalue { i8*, i32 } %1, 0
- %3 = extractvalue { i8*, i32 } %1, 1
+ %1 = landingpad { ptr, i32 }
+ catch ptr @_ZTIi
+ %2 = extractvalue { ptr, i32 } %1, 0
+ %3 = extractvalue { ptr, i32 } %1, 1
br label %catch.dispatch
catch.dispatch:
- %4 = call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTIi to i8*)) #3
+ %4 = call i32 @llvm.eh.typeid.for(ptr @_ZTIi) #3
%matches = icmp eq i32 %3, %4
br i1 %matches, label %catch, label %eh.resume
catch:
- %5 = call i8* @__cxa_begin_catch(i8* %2) #3
- %6 = bitcast i8* %5 to i32*
- %7 = load i32, i32* %6, align 4
+ %5 = call ptr @__cxa_begin_catch(ptr %2) #3
+ %6 = load i32, ptr %5, align 4
call void @__cxa_end_catch() #3
br label %try.cont
@@ -374,19 +372,18 @@ for.end:
br label %try.cont
eh.resume:
- %lpad.val = insertvalue { i8*, i32 } undef, i8* %2, 0
- %lpad.val3 = insertvalue { i8*, i32 } %lpad.val, i32 %3, 1
- resume { i8*, i32 } %lpad.val3
+ %lpad.val = insertvalue { ptr, i32 } undef, ptr %2, 0
+ %lpad.val3 = insertvalue { ptr, i32 } %lpad.val, i32 %3, 1
+ resume { ptr, i32 } %lpad.val3
}
; The malloc'ed memory is not capture and therefore promoted.
-define void @malloc_no_capture() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @malloc_no_capture() #0 personality ptr @__gxx_personality_v0 {
; CHECK-LABEL: @malloc_no_capture(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[CALL:%.*]] = call i8* @malloc(i64 4)
-; CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[CALL]] to i32*
-; CHECK-NEXT: [[DOTPROMOTED:%.*]] = load i32, i32* [[TMP0]], align 4
+; CHECK-NEXT: [[CALL:%.*]] = call ptr @malloc(i64 4)
+; CHECK-NEXT: [[DOTPROMOTED:%.*]] = load i32, ptr [[CALL]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[DOTPROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_LATCH:%.*]] ]
@@ -404,35 +401,33 @@ define void @malloc_no_capture() #0 personality i8* bitcast (i32 (...)* @__gxx_p
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
; CHECK: for.end:
; CHECK-NEXT: [[ADD_LCSSA2:%.*]] = phi i32 [ [[ADD]], [[FOR_LATCH]] ]
-; CHECK-NEXT: store i32 [[ADD_LCSSA2]], i32* [[TMP0]], align 4
+; CHECK-NEXT: store i32 [[ADD_LCSSA2]], ptr [[CALL]], align 4
; CHECK-NEXT: br label [[FUN_RET:%.*]]
; CHECK: lpad:
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_CALL]] ]
-; CHECK-NEXT: [[TMP1:%.*]] = landingpad { i8*, i32 }
-; CHECK-NEXT: catch i8* null
-; CHECK-NEXT: store i32 [[ADD_LCSSA]], i32* [[TMP0]], align 4
-; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { i8*, i32 } [[TMP1]], 0
-; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP1]], 1
+; CHECK-NEXT: [[TMP1:%.*]] = landingpad { ptr, i32 }
+; CHECK-NEXT: catch ptr null
+; CHECK-NEXT: store i32 [[ADD_LCSSA]], ptr [[CALL]], align 4
+; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { ptr, i32 } [[TMP1]], 0
+; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { ptr, i32 } [[TMP1]], 1
; CHECK-NEXT: br label [[CATCH:%.*]]
; CHECK: catch:
-; CHECK-NEXT: [[TMP4:%.*]] = call i8* @__cxa_begin_catch(i8* [[TMP2]])
-; CHECK-NEXT: [[TMP5:%.*]] = bitcast i32* [[TMP0]] to i8*
-; CHECK-NEXT: call void @free(i8* [[TMP5]])
+; CHECK-NEXT: [[TMP4:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP2]])
+; CHECK-NEXT: call void @free(ptr [[CALL]])
; CHECK-NEXT: call void @__cxa_end_catch()
; CHECK-NEXT: br label [[FUN_RET]]
; CHECK: fun.ret:
; CHECK-NEXT: ret void
;
entry:
- %call = call i8* @malloc(i64 4)
- %0 = bitcast i8* %call to i32*
+ %call = call ptr @malloc(i64 4)
br label %for.body
for.body:
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.latch ]
- %1 = load i32, i32* %0, align 4
- %add = add nsw i32 %1, 1
- store i32 %add, i32* %0, align 4
+ %0 = load i32, ptr %call, align 4
+ %add = add nsw i32 %0, 1
+ store i32 %add, ptr %call, align 4
br label %for.call
for.call:
@@ -451,16 +446,15 @@ for.end:
br label %fun.ret
lpad:
- %2 = landingpad { i8*, i32 }
- catch i8* null
- %3 = extractvalue { i8*, i32 } %2, 0
- %4 = extractvalue { i8*, i32 } %2, 1
+ %1 = landingpad { ptr, i32 }
+ catch ptr null
+ %2 = extractvalue { ptr, i32 } %1, 0
+ %3 = extractvalue { ptr, i32 } %1, 1
br label %catch
catch:
- %5 = call i8* @__cxa_begin_catch(i8* %3) #4
- %6 = bitcast i32* %0 to i8*
- call void @free(i8* %6)
+ %4 = call ptr @__cxa_begin_catch(ptr %2) #4
+ call void @free(ptr %call)
call void @__cxa_end_catch()
br label %fun.ret
@@ -469,18 +463,17 @@ fun.ret:
}
; The malloc'ed memory can be captured and therefore only loads can be promoted.
-define void @malloc_capture(i32** noalias %A) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @malloc_capture(ptr noalias %A) personality ptr @__gxx_personality_v0 {
; CHECK-LABEL: @malloc_capture(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[CALL:%.*]] = call i8* @malloc(i64 4)
-; CHECK-NEXT: [[TMP0:%.*]] = bitcast i8* [[CALL]] to i32*
-; CHECK-NEXT: [[DOTPROMOTED:%.*]] = load i32, i32* [[TMP0]], align 4
+; CHECK-NEXT: [[CALL:%.*]] = call ptr @malloc(i64 4)
+; CHECK-NEXT: [[DOTPROMOTED:%.*]] = load i32, ptr [[CALL]], align 4
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[ADD1:%.*]] = phi i32 [ [[DOTPROMOTED]], [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[FOR_LATCH:%.*]] ]
; CHECK-NEXT: [[I_0:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INC:%.*]], [[FOR_LATCH]] ]
; CHECK-NEXT: [[ADD]] = add nsw i32 [[ADD1]], 1
-; CHECK-NEXT: store i32 [[ADD]], i32* [[TMP0]], align 4
+; CHECK-NEXT: store i32 [[ADD]], ptr [[CALL]], align 4
; CHECK-NEXT: br label [[FOR_CALL:%.*]]
; CHECK: for.call:
; CHECK-NEXT: invoke void @boo_readnone()
@@ -488,37 +481,35 @@ define void @malloc_capture(i32** noalias %A) personality i8* bitcast (i32 (...)
; CHECK: invoke.cont:
; CHECK-NEXT: br label [[FOR_LATCH]]
; CHECK: for.latch:
-; CHECK-NEXT: store i32* [[TMP0]], i32** [[A:%.*]], align 8
+; CHECK-NEXT: store ptr [[CALL]], ptr [[A:%.*]], align 8
; CHECK-NEXT: [[INC]] = add i32 [[I_0]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_0]], 1024
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
; CHECK: for.end:
; CHECK-NEXT: br label [[FUN_RET:%.*]]
; CHECK: lpad:
-; CHECK-NEXT: [[TMP1:%.*]] = landingpad { i8*, i32 }
-; CHECK-NEXT: catch i8* null
-; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { i8*, i32 } [[TMP1]], 0
-; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i8*, i32 } [[TMP1]], 1
+; CHECK-NEXT: [[TMP1:%.*]] = landingpad { ptr, i32 }
+; CHECK-NEXT: catch ptr null
+; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { ptr, i32 } [[TMP1]], 0
+; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { ptr, i32 } [[TMP1]], 1
; CHECK-NEXT: br label [[CATCH:%.*]]
; CHECK: catch:
-; CHECK-NEXT: [[TMP4:%.*]] = call i8* @__cxa_begin_catch(i8* [[TMP2]])
-; CHECK-NEXT: [[TMP5:%.*]] = bitcast i32* [[TMP0]] to i8*
-; CHECK-NEXT: call void @free(i8* [[TMP5]])
+; CHECK-NEXT: [[TMP4:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP2]])
+; CHECK-NEXT: call void @free(ptr [[CALL]])
; CHECK-NEXT: call void @__cxa_end_catch()
; CHECK-NEXT: br label [[FUN_RET]]
; CHECK: fun.ret:
; CHECK-NEXT: ret void
;
entry:
- %call = call i8* @malloc(i64 4)
- %0 = bitcast i8* %call to i32*
+ %call = call ptr @malloc(i64 4)
br label %for.body
for.body:
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.latch ]
- %1 = load i32, i32* %0, align 4
- %add = add nsw i32 %1, 1
- store i32 %add, i32* %0, align 4
+ %0 = load i32, ptr %call, align 4
+ %add = add nsw i32 %0, 1
+ store i32 %add, ptr %call, align 4
br label %for.call
for.call:
@@ -529,7 +520,7 @@ invoke.cont:
br label %for.latch
for.latch:
- store i32* %0, i32** %A
+ store ptr %call, ptr %A
%inc = add i32 %i.0, 1
%cmp = icmp slt i32 %i.0, 1024
br i1 %cmp, label %for.body, label %for.end
@@ -538,16 +529,15 @@ for.end:
br label %fun.ret
lpad:
- %2 = landingpad { i8*, i32 }
- catch i8* null
- %3 = extractvalue { i8*, i32 } %2, 0
- %4 = extractvalue { i8*, i32 } %2, 1
+ %1 = landingpad { ptr, i32 }
+ catch ptr null
+ %2 = extractvalue { ptr, i32 } %1, 0
+ %3 = extractvalue { ptr, i32 } %1, 1
br label %catch
catch:
- %5 = call i8* @__cxa_begin_catch(i8* %3) #4
- %6 = bitcast i32* %0 to i8*
- call void @free(i8* %6)
+ %4 = call ptr @__cxa_begin_catch(ptr %2) #4
+ call void @free(ptr %call)
call void @__cxa_end_catch()
br label %fun.ret
@@ -556,10 +546,10 @@ fun.ret:
}
; Function Attrs: nounwind
-declare noalias i8* @malloc(i64)
+declare noalias ptr @malloc(i64)
; Function Attrs: nounwind
-declare void @free(i8* nocapture)
+declare void @free(ptr nocapture)
declare void @boo()
@@ -570,10 +560,10 @@ declare void @boo_readnone() readnone
declare i32 @__gxx_personality_v0(...)
-declare i8* @__cxa_begin_catch(i8*)
+declare ptr @__cxa_begin_catch(ptr)
declare void @__cxa_end_catch()
-declare i32 @llvm.eh.typeid.for(i8*)
+declare i32 @llvm.eh.typeid.for(ptr)
declare void @f() uwtable
diff --git a/llvm/test/Transforms/LICM/scalar-promote.ll b/llvm/test/Transforms/LICM/scalar-promote.ll
index 760d1397142ba..df1d3699d329c 100644
--- a/llvm/test/Transforms/LICM/scalar-promote.ll
+++ b/llvm/test/Transforms/LICM/scalar-promote.ll
@@ -3,12 +3,12 @@
; RUN: opt -aa-pipeline=tbaa,basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' -S %s | FileCheck %s
target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
- at X = global i32 7 ; <i32*> [#uses=4]
+ at X = global i32 7 ; <ptr> [#uses=4]
define void @test1(i32 %i) {
; CHECK-LABEL: @test1(
; CHECK-NEXT: Entry:
-; CHECK-NEXT: [[X_PROMOTED:%.*]] = load i32, i32* @X, align 4
+; CHECK-NEXT: [[X_PROMOTED:%.*]] = load i32, ptr @X, align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: [[X21:%.*]] = phi i32 [ [[X_PROMOTED]], [[ENTRY:%.*]] ], [ [[X2:%.*]], [[LOOP]] ]
@@ -19,7 +19,7 @@ define void @test1(i32 %i) {
; CHECK-NEXT: br i1 [[COND]], label [[OUT:%.*]], label [[LOOP]]
; CHECK: Out:
; CHECK-NEXT: [[X2_LCSSA:%.*]] = phi i32 [ [[X2]], [[LOOP]] ]
-; CHECK-NEXT: store i32 [[X2_LCSSA]], i32* @X, align 4
+; CHECK-NEXT: store i32 [[X2_LCSSA]], ptr @X, align 4
; CHECK-NEXT: ret void
;
Entry:
@@ -27,9 +27,9 @@ Entry:
Loop: ; preds = %Loop, %0
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ] ; <i32> [#uses=1]
- %x = load i32, i32* @X ; <i32> [#uses=1]
+ %x = load i32, ptr @X ; <i32> [#uses=1]
%x2 = add i32 %x, 1 ; <i32> [#uses=1]
- store i32 %x2, i32* @X
+ store i32 %x2, ptr @X
%Next = add i32 %j, 1 ; <i32> [#uses=2]
%cond = icmp eq i32 %Next, 0 ; <i1> [#uses=1]
br i1 %cond, label %Out, label %Loop
@@ -41,7 +41,7 @@ Out:
define void @test2(i32 %i) {
; CHECK-LABEL: @test2(
; CHECK-NEXT: Entry:
-; CHECK-NEXT: [[DOTPROMOTED:%.*]] = load i32, i32* getelementptr inbounds (i32, i32* @X, i64 1), align 4
+; CHECK-NEXT: [[DOTPROMOTED:%.*]] = load i32, ptr getelementptr inbounds (i32, ptr @X, i64 1), align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: [[V1:%.*]] = phi i32 [ [[V:%.*]], [[LOOP]] ], [ [[DOTPROMOTED]], [[ENTRY:%.*]] ]
@@ -49,18 +49,18 @@ define void @test2(i32 %i) {
; CHECK-NEXT: br i1 false, label [[LOOP]], label [[EXIT:%.*]]
; CHECK: Exit:
; CHECK-NEXT: [[V_LCSSA:%.*]] = phi i32 [ [[V]], [[LOOP]] ]
-; CHECK-NEXT: store i32 [[V_LCSSA]], i32* getelementptr inbounds (i32, i32* @X, i64 1), align 4
+; CHECK-NEXT: store i32 [[V_LCSSA]], ptr getelementptr inbounds (i32, ptr @X, i64 1), align 4
; CHECK-NEXT: ret void
;
Entry:
br label %Loop
Loop: ; preds = %Loop, %0
- %X1 = getelementptr i32, i32* @X, i64 1 ; <i32*> [#uses=1]
- %A = load i32, i32* %X1 ; <i32> [#uses=1]
+ %X1 = getelementptr i32, ptr @X, i64 1 ; <ptr> [#uses=1]
+ %A = load i32, ptr %X1 ; <i32> [#uses=1]
%V = add i32 %A, 1 ; <i32> [#uses=1]
- %X2 = getelementptr i32, i32* @X, i64 1 ; <i32*> [#uses=1]
- store i32 %V, i32* %X2
+ %X2 = getelementptr i32, ptr @X, i64 1 ; <ptr> [#uses=1]
+ store i32 %V, ptr %X2
br i1 false, label %Loop, label %Exit
Exit: ; preds = %Loop
@@ -71,9 +71,9 @@ define void @test3(i32 %i) {
; CHECK-LABEL: @test3(
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
-; CHECK-NEXT: [[X:%.*]] = load volatile i32, i32* @X, align 4
+; CHECK-NEXT: [[X:%.*]] = load volatile i32, ptr @X, align 4
; CHECK-NEXT: [[X2:%.*]] = add i32 [[X]], 1
-; CHECK-NEXT: store i32 [[X2]], i32* @X, align 4
+; CHECK-NEXT: store i32 [[X2]], ptr @X, align 4
; CHECK-NEXT: br i1 true, label [[OUT:%.*]], label [[LOOP]]
; CHECK: Out:
; CHECK-NEXT: ret void
@@ -81,9 +81,9 @@ define void @test3(i32 %i) {
br label %Loop
Loop:
; Should not promote this to a register
- %x = load volatile i32, i32* @X
+ %x = load volatile i32, ptr @X
%x2 = add i32 %x, 1
- store i32 %x2, i32* @X
+ store i32 %x2, ptr @X
br i1 true, label %Out, label %Loop
Out: ; preds = %Loop
@@ -95,18 +95,18 @@ define void @test3b(i32 %i) {
; CHECK-LABEL: @test3b(
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
-; CHECK-NEXT: [[X:%.*]] = load i32, i32* @X, align 4
+; CHECK-NEXT: [[X:%.*]] = load i32, ptr @X, align 4
; CHECK-NEXT: [[X2:%.*]] = add i32 [[X]], 1
-; CHECK-NEXT: store volatile i32 [[X2]], i32* @X, align 4
+; CHECK-NEXT: store volatile i32 [[X2]], ptr @X, align 4
; CHECK-NEXT: br i1 true, label [[OUT:%.*]], label [[LOOP]]
; CHECK: Out:
; CHECK-NEXT: ret void
;
br label %Loop
Loop:
- %x = load i32, i32* @X
+ %x = load i32, ptr @X
%x2 = add i32 %x, 1
- store volatile i32 %x2, i32* @X
+ store volatile i32 %x2, ptr @X
br i1 true, label %Out, label %Loop
Out: ; preds = %Loop
@@ -116,57 +116,57 @@ Out: ; preds = %Loop
; PR8041
; Should have promoted 'handle2' accesses.
; Should not have promoted offsetx1 loads.
-define void @test4(i8* %x, i8 %n) {
+define void @test4(ptr %x, i8 %n) {
; CHECK-LABEL: @test4(
-; CHECK-NEXT: [[HANDLE1:%.*]] = alloca i8*, align 8
-; CHECK-NEXT: [[HANDLE2:%.*]] = alloca i8*, align 8
-; CHECK-NEXT: store i8* [[X:%.*]], i8** [[HANDLE1]], align 8
-; CHECK-NEXT: [[TMP:%.*]] = getelementptr i8, i8* [[X]], i64 8
-; CHECK-NEXT: [[OFFSETX1:%.*]] = load i8*, i8** [[HANDLE1]], align 8
+; CHECK-NEXT: [[HANDLE1:%.*]] = alloca ptr, align 8
+; CHECK-NEXT: [[HANDLE2:%.*]] = alloca ptr, align 8
+; CHECK-NEXT: store ptr [[X:%.*]], ptr [[HANDLE1]], align 8
+; CHECK-NEXT: [[TMP:%.*]] = getelementptr i8, ptr [[X]], i64 8
+; CHECK-NEXT: [[OFFSETX1:%.*]] = load ptr, ptr [[HANDLE1]], align 8
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: br label [[SUBLOOP:%.*]]
; CHECK: subloop:
-; CHECK-NEXT: [[NEWOFFSETX21:%.*]] = phi i8* [ [[TMP]], [[LOOP]] ], [ [[NEWOFFSETX2:%.*]], [[SUBLOOP]] ]
+; CHECK-NEXT: [[NEWOFFSETX21:%.*]] = phi ptr [ [[TMP]], [[LOOP]] ], [ [[NEWOFFSETX2:%.*]], [[SUBLOOP]] ]
; CHECK-NEXT: [[COUNT:%.*]] = phi i8 [ 0, [[LOOP]] ], [ [[NEXTCOUNT:%.*]], [[SUBLOOP]] ]
-; CHECK-NEXT: store i8 [[N:%.*]], i8* [[NEWOFFSETX21]], align 1
-; CHECK-NEXT: [[NEWOFFSETX2]] = getelementptr i8, i8* [[NEWOFFSETX21]], i64 -1
+; CHECK-NEXT: store i8 [[N:%.*]], ptr [[NEWOFFSETX21]], align 1
+; CHECK-NEXT: [[NEWOFFSETX2]] = getelementptr i8, ptr [[NEWOFFSETX21]], i64 -1
; CHECK-NEXT: [[NEXTCOUNT]] = add i8 [[COUNT]], 1
; CHECK-NEXT: [[INNEREXITCOND:%.*]] = icmp sge i8 [[NEXTCOUNT]], 8
; CHECK-NEXT: br i1 [[INNEREXITCOND]], label [[INNEREXIT:%.*]], label [[SUBLOOP]]
; CHECK: innerexit:
-; CHECK-NEXT: [[NEWOFFSETX2_LCSSA:%.*]] = phi i8* [ [[NEWOFFSETX2]], [[SUBLOOP]] ]
-; CHECK-NEXT: [[VAL:%.*]] = load i8, i8* [[OFFSETX1]], align 1
+; CHECK-NEXT: [[NEWOFFSETX2_LCSSA:%.*]] = phi ptr [ [[NEWOFFSETX2]], [[SUBLOOP]] ]
+; CHECK-NEXT: [[VAL:%.*]] = load i8, ptr [[OFFSETX1]], align 1
; CHECK-NEXT: [[COND:%.*]] = icmp eq i8 [[VAL]], [[N]]
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
-; CHECK-NEXT: [[NEWOFFSETX2_LCSSA_LCSSA:%.*]] = phi i8* [ [[NEWOFFSETX2_LCSSA]], [[INNEREXIT]] ]
-; CHECK-NEXT: store i8* [[NEWOFFSETX2_LCSSA_LCSSA]], i8** [[HANDLE2]], align 8
+; CHECK-NEXT: [[NEWOFFSETX2_LCSSA_LCSSA:%.*]] = phi ptr [ [[NEWOFFSETX2_LCSSA]], [[INNEREXIT]] ]
+; CHECK-NEXT: store ptr [[NEWOFFSETX2_LCSSA_LCSSA]], ptr [[HANDLE2]], align 8
; CHECK-NEXT: ret void
;
- %handle1 = alloca i8*
- %handle2 = alloca i8*
- store i8* %x, i8** %handle1
+ %handle1 = alloca ptr
+ %handle2 = alloca ptr
+ store ptr %x, ptr %handle1
br label %loop
loop:
- %tmp = getelementptr i8, i8* %x, i64 8
- store i8* %tmp, i8** %handle2
+ %tmp = getelementptr i8, ptr %x, i64 8
+ store ptr %tmp, ptr %handle2
br label %subloop
subloop:
%count = phi i8 [ 0, %loop ], [ %nextcount, %subloop ]
- %offsetx2 = load i8*, i8** %handle2
- store i8 %n, i8* %offsetx2
- %newoffsetx2 = getelementptr i8, i8* %offsetx2, i64 -1
- store i8* %newoffsetx2, i8** %handle2
+ %offsetx2 = load ptr, ptr %handle2
+ store i8 %n, ptr %offsetx2
+ %newoffsetx2 = getelementptr i8, ptr %offsetx2, i64 -1
+ store ptr %newoffsetx2, ptr %handle2
%nextcount = add i8 %count, 1
%innerexitcond = icmp sge i8 %nextcount, 8
br i1 %innerexitcond, label %innerexit, label %subloop
innerexit:
- %offsetx1 = load i8*, i8** %handle1
- %val = load i8, i8* %offsetx1
+ %offsetx1 = load ptr, ptr %handle1
+ %val = load i8, ptr %offsetx1
%cond = icmp eq i8 %val, %n
br i1 %cond, label %exit, label %loop
@@ -174,22 +174,22 @@ exit:
ret void
}
-define void @test5(i32 %i, i32** noalias %P2) {
+define void @test5(i32 %i, ptr noalias %P2) {
; CHECK-LABEL: @test5(
; CHECK-NEXT: Entry:
-; CHECK-NEXT: [[X_PROMOTED:%.*]] = load i32, i32* @X, align 4
+; CHECK-NEXT: [[X_PROMOTED:%.*]] = load i32, ptr @X, align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: [[X21:%.*]] = phi i32 [ [[X_PROMOTED]], [[ENTRY:%.*]] ], [ [[X2:%.*]], [[LOOP]] ]
; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[NEXT:%.*]], [[LOOP]] ]
; CHECK-NEXT: [[X2]] = add i32 [[X21]], 1
-; CHECK-NEXT: store atomic i32* @X, i32** [[P2:%.*]] monotonic, align 8
+; CHECK-NEXT: store atomic ptr @X, ptr [[P2:%.*]] monotonic, align 8
; CHECK-NEXT: [[NEXT]] = add i32 [[J]], 1
; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[NEXT]], 0
; CHECK-NEXT: br i1 [[COND]], label [[OUT:%.*]], label [[LOOP]]
; CHECK: Out:
; CHECK-NEXT: [[X2_LCSSA:%.*]] = phi i32 [ [[X2]], [[LOOP]] ]
-; CHECK-NEXT: store i32 [[X2_LCSSA]], i32* @X, align 4
+; CHECK-NEXT: store i32 [[X2_LCSSA]], ptr @X, align 4
; CHECK-NEXT: ret void
;
Entry:
@@ -197,11 +197,11 @@ Entry:
Loop: ; preds = %Loop, %0
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ] ; <i32> [#uses=1]
- %x = load i32, i32* @X ; <i32> [#uses=1]
+ %x = load i32, ptr @X ; <i32> [#uses=1]
%x2 = add i32 %x, 1 ; <i32> [#uses=1]
- store i32 %x2, i32* @X
+ store i32 %x2, ptr @X
- store atomic i32* @X, i32** %P2 monotonic, align 8
+ store atomic ptr @X, ptr %P2 monotonic, align 8
%Next = add i32 %j, 1 ; <i32> [#uses=2]
%cond = icmp eq i32 %Next, 0 ; <i1> [#uses=1]
@@ -214,33 +214,33 @@ Out:
; PR14753 - Preserve TBAA tags when promoting values in a loop.
-define void @test6(i32 %n, float* nocapture %a, i32* %gi) {
+define void @test6(i32 %n, ptr nocapture %a, ptr %gi) {
; CHECK-LABEL: @test6(
; CHECK-NEXT: entry:
-; CHECK-NEXT: store i32 0, i32* [[GI:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
+; CHECK-NEXT: store i32 0, ptr [[GI:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 0, [[N:%.*]]
; CHECK-NEXT: br i1 [[CMP1]], label [[FOR_BODY_LR_PH:%.*]], label [[FOR_END:%.*]]
; CHECK: for.body.lr.ph:
-; CHECK-NEXT: [[GI_PROMOTED:%.*]] = load i32, i32* [[GI]], align 4, !tbaa [[TBAA0]]
+; CHECK-NEXT: [[GI_PROMOTED:%.*]] = load i32, ptr [[GI]], align 4, !tbaa [[TBAA0]]
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
; CHECK-NEXT: [[INC1:%.*]] = phi i32 [ [[GI_PROMOTED]], [[FOR_BODY_LR_PH]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
; CHECK-NEXT: [[STOREMERGE2:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INC]], [[FOR_BODY]] ]
; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STOREMERGE2]] to i64
-; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds float, float* [[A:%.*]], i64 [[IDXPROM]]
-; CHECK-NEXT: store float 0.000000e+00, float* [[ARRAYIDX]], align 4, !tbaa [[TBAA4:![0-9]+]]
+; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds float, ptr [[A:%.*]], i64 [[IDXPROM]]
+; CHECK-NEXT: store float 0.000000e+00, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4:![0-9]+]]
; CHECK-NEXT: [[INC]] = add nsw i32 [[INC1]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[INC]], [[N]]
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_COND_FOR_END_CRIT_EDGE:%.*]]
; CHECK: for.cond.for.end_crit_edge:
; CHECK-NEXT: [[INC_LCSSA:%.*]] = phi i32 [ [[INC]], [[FOR_BODY]] ]
-; CHECK-NEXT: store i32 [[INC_LCSSA]], i32* [[GI]], align 4, !tbaa [[TBAA0]]
+; CHECK-NEXT: store i32 [[INC_LCSSA]], ptr [[GI]], align 4, !tbaa [[TBAA0]]
; CHECK-NEXT: br label [[FOR_END]]
; CHECK: for.end:
; CHECK-NEXT: ret void
;
entry:
- store i32 0, i32* %gi, align 4, !tbaa !0
+ store i32 0, ptr %gi, align 4, !tbaa !0
%cmp1 = icmp slt i32 0, %n
br i1 %cmp1, label %for.body.lr.ph, label %for.end
@@ -250,11 +250,11 @@ for.body.lr.ph: ; preds = %entry
for.body: ; preds = %for.body.lr.ph, %for.body
%storemerge2 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
%idxprom = sext i32 %storemerge2 to i64
- %arrayidx = getelementptr inbounds float, float* %a, i64 %idxprom
- store float 0.000000e+00, float* %arrayidx, align 4, !tbaa !3
- %0 = load i32, i32* %gi, align 4, !tbaa !0
+ %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom
+ store float 0.000000e+00, ptr %arrayidx, align 4, !tbaa !3
+ %0 = load i32, ptr %gi, align 4, !tbaa !0
%inc = add nsw i32 %0, 1
- store i32 %inc, i32* %gi, align 4, !tbaa !0
+ store i32 %inc, ptr %gi, align 4, !tbaa !0
%cmp = icmp slt i32 %inc, %n
br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge
@@ -267,15 +267,15 @@ for.end: ; preds = %for.cond.for.end_cr
}
declare i32 @opaque(i32) argmemonly
-declare void @capture(i32*)
+declare void @capture(ptr)
; We can promote even if opaque may throw.
define i32 @test7() {
; CHECK-LABEL: @test7(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[LOCAL:%.*]] = alloca i32, align 4
-; CHECK-NEXT: call void @capture(i32* [[LOCAL]])
-; CHECK-NEXT: [[LOCAL_PROMOTED:%.*]] = load i32, i32* [[LOCAL]], align 4
+; CHECK-NEXT: call void @capture(ptr [[LOCAL]])
+; CHECK-NEXT: [[LOCAL_PROMOTED:%.*]] = load i32, ptr [[LOCAL]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X21:%.*]] = phi i32 [ [[LOCAL_PROMOTED]], [[ENTRY:%.*]] ], [ [[X2:%.*]], [[LOOP]] ]
@@ -286,26 +286,26 @@ define i32 @test7() {
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: [[X2_LCSSA:%.*]] = phi i32 [ [[X2]], [[LOOP]] ]
-; CHECK-NEXT: store i32 [[X2_LCSSA]], i32* [[LOCAL]], align 4
-; CHECK-NEXT: [[RET:%.*]] = load i32, i32* [[LOCAL]], align 4
+; CHECK-NEXT: store i32 [[X2_LCSSA]], ptr [[LOCAL]], align 4
+; CHECK-NEXT: [[RET:%.*]] = load i32, ptr [[LOCAL]], align 4
; CHECK-NEXT: ret i32 [[RET]]
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
+ call void @capture(ptr %local)
br label %loop
loop:
%j = phi i32 [ 0, %entry ], [ %next, %loop ]
- %x = load i32, i32* %local
+ %x = load i32, ptr %local
%x2 = call i32 @opaque(i32 %x) ; Note this does not capture %local
- store i32 %x2, i32* %local
+ store i32 %x2, ptr %local
%next = add i32 %j, 1
%cond = icmp eq i32 %next, 0
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %local
+ %ret = load i32, ptr %local
ret i32 %ret
}
@@ -315,8 +315,8 @@ define i32 @test7bad() {
; CHECK-LABEL: @test7bad(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[LOCAL:%.*]] = alloca i32, align 4
-; CHECK-NEXT: call void @capture(i32* [[LOCAL]])
-; CHECK-NEXT: [[LOCAL_PROMOTED:%.*]] = load i32, i32* [[LOCAL]], align 4
+; CHECK-NEXT: call void @capture(ptr [[LOCAL]])
+; CHECK-NEXT: [[LOCAL_PROMOTED:%.*]] = load i32, ptr [[LOCAL]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X22:%.*]] = phi i32 [ [[LOCAL_PROMOTED]], [[ENTRY:%.*]] ], [ [[X21:%.*]], [[ELSE:%.*]] ]
@@ -325,7 +325,7 @@ define i32 @test7bad() {
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X2]], 0
; CHECK-NEXT: br i1 [[CMP]], label [[IF:%.*]], label [[ELSE]]
; CHECK: if:
-; CHECK-NEXT: store i32 [[X2]], i32* [[LOCAL]], align 4
+; CHECK-NEXT: store i32 [[X2]], ptr [[LOCAL]], align 4
; CHECK-NEXT: br label [[ELSE]]
; CHECK: else:
; CHECK-NEXT: [[X21]] = phi i32 [ [[X2]], [[IF]] ], [ [[X22]], [[LOOP]] ]
@@ -333,22 +333,22 @@ define i32 @test7bad() {
; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[NEXT]], 0
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
-; CHECK-NEXT: [[RET:%.*]] = load i32, i32* [[LOCAL]], align 4
+; CHECK-NEXT: [[RET:%.*]] = load i32, ptr [[LOCAL]], align 4
; CHECK-NEXT: ret i32 [[RET]]
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
+ call void @capture(ptr %local)
br label %loop
loop:
%j = phi i32 [ 0, %entry ], [ %next, %else ]
- %x = load i32, i32* %local
+ %x = load i32, ptr %local
%x2 = call i32 @opaque(i32 %x) ; Note this does not capture %local
%cmp = icmp eq i32 %x2, 0
br i1 %cmp, label %if, label %else
if:
- store i32 %x2, i32* %local
+ store i32 %x2, ptr %local
br label %else
else:
@@ -357,7 +357,7 @@ else:
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %local
+ %ret = load i32, ptr %local
ret i32 %ret
}
@@ -368,8 +368,8 @@ define i32 @test8() {
; CHECK-LABEL: @test8(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[LOCAL:%.*]] = alloca i32, align 4
-; CHECK-NEXT: call void @capture(i32* [[LOCAL]])
-; CHECK-NEXT: [[LOCAL_PROMOTED:%.*]] = load i32, i32* [[LOCAL]], align 4
+; CHECK-NEXT: call void @capture(ptr [[LOCAL]])
+; CHECK-NEXT: [[LOCAL_PROMOTED:%.*]] = load i32, ptr [[LOCAL]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X21:%.*]] = phi i32 [ [[LOCAL_PROMOTED]], [[ENTRY:%.*]] ], [ [[X2:%.*]], [[LOOP]] ]
@@ -381,27 +381,27 @@ define i32 @test8() {
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: [[X2_LCSSA:%.*]] = phi i32 [ [[X2]], [[LOOP]] ]
-; CHECK-NEXT: store i32 [[X2_LCSSA]], i32* [[LOCAL]], align 4
-; CHECK-NEXT: [[RET:%.*]] = load i32, i32* [[LOCAL]], align 4
+; CHECK-NEXT: store i32 [[X2_LCSSA]], ptr [[LOCAL]], align 4
+; CHECK-NEXT: [[RET:%.*]] = load i32, ptr [[LOCAL]], align 4
; CHECK-NEXT: ret i32 [[RET]]
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
+ call void @capture(ptr %local)
br label %loop
loop:
%j = phi i32 [ 0, %entry ], [ %next, %loop ]
%throwaway = call i32 @opaque(i32 %j)
- %x = load i32, i32* %local
+ %x = load i32, ptr %local
%x2 = call i32 @opaque(i32 %x)
- store i32 %x2, i32* %local
+ store i32 %x2, ptr %local
%next = add i32 %j, 1
%cond = icmp eq i32 %next, 0
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %local
+ %ret = load i32, ptr %local
ret i32 %ret
}
@@ -413,8 +413,8 @@ define i32 @test9() {
; CHECK-LABEL: @test9(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[LOCAL:%.*]] = alloca i32, align 4
-; CHECK-NEXT: call void @capture(i32* [[LOCAL]])
-; CHECK-NEXT: [[LOCAL_PROMOTED:%.*]] = load i32, i32* [[LOCAL]], align 4
+; CHECK-NEXT: call void @capture(ptr [[LOCAL]])
+; CHECK-NEXT: [[LOCAL_PROMOTED:%.*]] = load i32, ptr [[LOCAL]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[X21:%.*]] = phi i32 [ [[LOCAL_PROMOTED]], [[ENTRY:%.*]] ], [ [[X2:%.*]], [[ELSE:%.*]] ]
@@ -431,13 +431,13 @@ define i32 @test9() {
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: [[X2_LCSSA:%.*]] = phi i32 [ [[X2]], [[ELSE]] ]
-; CHECK-NEXT: store i32 [[X2_LCSSA]], i32* [[LOCAL]], align 4
-; CHECK-NEXT: [[RET:%.*]] = load i32, i32* [[LOCAL]], align 4
+; CHECK-NEXT: store i32 [[X2_LCSSA]], ptr [[LOCAL]], align 4
+; CHECK-NEXT: [[RET:%.*]] = load i32, ptr [[LOCAL]], align 4
; CHECK-NEXT: ret i32 [[RET]]
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
+ call void @capture(ptr %local)
br label %loop
loop:
@@ -447,18 +447,18 @@ loop:
br i1 %cmp, label %if, label %else
if:
- %x = load i32, i32* %local
+ %x = load i32, ptr %local
br label %else
else:
%x2 = phi i32 [ 0, %loop ], [ %x, %if]
- store i32 %x2, i32* %local
+ store i32 %x2, ptr %local
%next = add i32 %j, 1
%cond = icmp eq i32 %next, 0
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %local
+ %ret = load i32, ptr %local
ret i32 %ret
}
@@ -466,8 +466,8 @@ define i32 @test9bad(i32 %i) {
; CHECK-LABEL: @test9bad(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[LOCAL:%.*]] = alloca i32, align 4
-; CHECK-NEXT: call void @capture(i32* [[LOCAL]])
-; CHECK-NEXT: [[NOTDEREF:%.*]] = getelementptr i32, i32* [[LOCAL]], i32 [[I:%.*]]
+; CHECK-NEXT: call void @capture(ptr [[LOCAL]])
+; CHECK-NEXT: [[NOTDEREF:%.*]] = getelementptr i32, ptr [[LOCAL]], i32 [[I:%.*]]
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[NEXT:%.*]], [[ELSE:%.*]] ]
@@ -475,22 +475,22 @@ define i32 @test9bad(i32 %i) {
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[J2]], 0
; CHECK-NEXT: br i1 [[CMP]], label [[IF:%.*]], label [[ELSE]]
; CHECK: if:
-; CHECK-NEXT: [[X:%.*]] = load i32, i32* [[NOTDEREF]], align 4
+; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[NOTDEREF]], align 4
; CHECK-NEXT: br label [[ELSE]]
; CHECK: else:
; CHECK-NEXT: [[X2:%.*]] = phi i32 [ 0, [[LOOP]] ], [ [[X]], [[IF]] ]
-; CHECK-NEXT: store i32 [[X2]], i32* [[NOTDEREF]], align 4
+; CHECK-NEXT: store i32 [[X2]], ptr [[NOTDEREF]], align 4
; CHECK-NEXT: [[NEXT]] = add i32 [[J]], 1
; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[NEXT]], 0
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]
; CHECK: exit:
-; CHECK-NEXT: [[RET:%.*]] = load i32, i32* [[NOTDEREF]], align 4
+; CHECK-NEXT: [[RET:%.*]] = load i32, ptr [[NOTDEREF]], align 4
; CHECK-NEXT: ret i32 [[RET]]
;
entry:
%local = alloca i32
- call void @capture(i32* %local)
- %notderef = getelementptr i32, i32* %local, i32 %i
+ call void @capture(ptr %local)
+ %notderef = getelementptr i32, ptr %local, i32 %i
br label %loop
loop:
@@ -500,25 +500,25 @@ loop:
br i1 %cmp, label %if, label %else
if:
- %x = load i32, i32* %notderef
+ %x = load i32, ptr %notderef
br label %else
else:
%x2 = phi i32 [ 0, %loop ], [ %x, %if]
- store i32 %x2, i32* %notderef
+ store i32 %x2, ptr %notderef
%next = add i32 %j, 1
%cond = icmp eq i32 %next, 0
br i1 %cond, label %exit, label %loop
exit:
- %ret = load i32, i32* %notderef
+ %ret = load i32, ptr %notderef
ret i32 %ret
}
define void @test10(i32 %i) {
; CHECK-LABEL: @test10(
; CHECK-NEXT: Entry:
-; CHECK-NEXT: [[X_PROMOTED:%.*]] = load atomic i32, i32* @X unordered, align 4
+; CHECK-NEXT: [[X_PROMOTED:%.*]] = load atomic i32, ptr @X unordered, align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: [[X21:%.*]] = phi i32 [ [[X_PROMOTED]], [[ENTRY:%.*]] ], [ [[X2:%.*]], [[LOOP]] ]
@@ -529,7 +529,7 @@ define void @test10(i32 %i) {
; CHECK-NEXT: br i1 [[COND]], label [[OUT:%.*]], label [[LOOP]]
; CHECK: Out:
; CHECK-NEXT: [[X2_LCSSA:%.*]] = phi i32 [ [[X2]], [[LOOP]] ]
-; CHECK-NEXT: store atomic i32 [[X2_LCSSA]], i32* @X unordered, align 4
+; CHECK-NEXT: store atomic i32 [[X2_LCSSA]], ptr @X unordered, align 4
; CHECK-NEXT: ret void
;
Entry:
@@ -538,9 +538,9 @@ Entry:
Loop: ; preds = %Loop, %0
%j = phi i32 [ 0, %Entry ], [ %Next, %Loop ] ; <i32> [#uses=1]
- %x = load atomic i32, i32* @X unordered, align 4
+ %x = load atomic i32, ptr @X unordered, align 4
%x2 = add i32 %x, 1
- store atomic i32 %x2, i32* @X unordered, align 4
+ store atomic i32 %x2, ptr @X unordered, align 4
%Next = add i32 %j, 1
%cond = icmp eq i32 %Next, 0
br i1 %cond, label %Out, label %Loop
@@ -555,7 +555,7 @@ Out:
define void @test11(i32 %i) {
; CHECK-LABEL: @test11(
; CHECK-NEXT: Entry:
-; CHECK-NEXT: [[X_PROMOTED:%.*]] = load i32, i32* @X, align 4
+; CHECK-NEXT: [[X_PROMOTED:%.*]] = load i32, ptr @X, align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: [[X21:%.*]] = phi i32 [ [[X_PROMOTED]], [[ENTRY:%.*]] ], [ [[X2:%.*]], [[BODY:%.*]] ]
@@ -569,11 +569,11 @@ define void @test11(i32 %i) {
; CHECK-NEXT: br i1 [[COND]], label [[OUT:%.*]], label [[LOOP]]
; CHECK: Early:
; CHECK-NEXT: [[X21_LCSSA:%.*]] = phi i32 [ [[X21]], [[LOOP]] ]
-; CHECK-NEXT: store i32 [[X21_LCSSA]], i32* @X, align 4
+; CHECK-NEXT: store i32 [[X21_LCSSA]], ptr @X, align 4
; CHECK-NEXT: ret void
; CHECK: Out:
; CHECK-NEXT: [[X2_LCSSA:%.*]] = phi i32 [ [[X2]], [[BODY]] ]
-; CHECK-NEXT: store i32 [[X2_LCSSA]], i32* @X, align 4
+; CHECK-NEXT: store i32 [[X2_LCSSA]], ptr @X, align 4
; CHECK-NEXT: ret void
;
Entry:
@@ -585,9 +585,9 @@ Loop: ; preds = %Loop, %0
%early.test = icmp ult i32 %j, 32
br i1 %early.test, label %body, label %Early
body:
- %x = load i32, i32* @X ; <i32> [#uses=1]
+ %x = load i32, ptr @X ; <i32> [#uses=1]
%x2 = add i32 %x, 1 ; <i32> [#uses=1]
- store i32 %x2, i32* @X
+ store i32 %x2, ptr @X
%Next = add i32 %j, 1 ; <i32> [#uses=2]
%cond = icmp eq i32 %Next, 0 ; <i1> [#uses=1]
br i1 %cond, label %Out, label %Loop
@@ -599,11 +599,11 @@ Out:
}
-define i8 @test_hoistable_existing_load_sinkable_store_writeonly(i8* dereferenceable(8) %ptr, i8 %start) writeonly {
+define i8 @test_hoistable_existing_load_sinkable_store_writeonly(ptr dereferenceable(8) %ptr, i8 %start) writeonly {
; CHECK: Function Attrs: writeonly
; CHECK-LABEL: @test_hoistable_existing_load_sinkable_store_writeonly(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[PTR_PROMOTED:%.*]] = load i8, i8* [[PTR:%.*]], align 1
+; CHECK-NEXT: [[PTR_PROMOTED:%.*]] = load i8, ptr [[PTR:%.*]], align 1
; CHECK-NEXT: br label [[LOOP_HEADER:%.*]]
; CHECK: loop.header:
; CHECK-NEXT: [[INC1:%.*]] = phi i8 [ [[PTR_PROMOTED]], [[ENTRY:%.*]] ], [ [[INC1]], [[LOOP_LATCH:%.*]] ]
@@ -611,7 +611,7 @@ define i8 @test_hoistable_existing_load_sinkable_store_writeonly(i8* dereference
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[I]], 4
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP_LATCH]], label [[EXIT:%.*]]
; CHECK: loop.latch:
-; CHECK-NEXT: store i8 [[INC1]], i8* [[PTR]], align 1
+; CHECK-NEXT: store i8 [[INC1]], ptr [[PTR]], align 1
; CHECK-NEXT: [[ADD]] = add i8 [[I]], [[INC1]]
; CHECK-NEXT: br label [[LOOP_HEADER]]
; CHECK: exit:
@@ -628,8 +628,8 @@ loop.header:
loop.latch:
%div = sdiv i8 %i, 3
- %inc = load i8, i8* %ptr
- store i8 %inc, i8* %ptr
+ %inc = load i8, ptr %ptr
+ store i8 %inc, ptr %ptr
%add = add i8 %i, %inc
br label %loop.header
@@ -656,7 +656,7 @@ define void @test_sink_store_only() writeonly {
; CHECK-NEXT: br label [[LOOP_HEADER]]
; CHECK: exit:
; CHECK-NEXT: [[DIV1_LCSSA:%.*]] = phi i8 [ [[DIV1]], [[LOOP_HEADER]] ]
-; CHECK-NEXT: store i8 [[DIV1_LCSSA]], i8* @glb, align 1
+; CHECK-NEXT: store i8 [[DIV1_LCSSA]], ptr @glb, align 1
; CHECK-NEXT: ret void
;
entry:
@@ -669,7 +669,7 @@ loop.header:
loop.latch:
%div = sdiv i8 %i, 3
- store i8 %div, i8* @glb, align 1
+ store i8 %div, ptr @glb, align 1
%add = add i8 %i, 4
br label %loop.header
@@ -694,7 +694,7 @@ define void @test_sink_store_to_local_object_only_loop_must_execute() writeonly
; CHECK-NEXT: br label [[LOOP_HEADER]]
; CHECK: exit:
; CHECK-NEXT: [[DIV1_LCSSA:%.*]] = phi i8 [ [[DIV1]], [[LOOP_HEADER]] ]
-; CHECK-NEXT: store i8 [[DIV1_LCSSA]], i8* [[A]], align 1
+; CHECK-NEXT: store i8 [[DIV1_LCSSA]], ptr [[A]], align 1
; CHECK-NEXT: ret void
;
entry:
@@ -708,7 +708,7 @@ loop.header:
loop.latch:
%div = sdiv i8 %i, 3
- store i8 %div, i8* %a, align 1
+ store i8 %div, ptr %a, align 1
%add = add i8 %i, 4
br label %loop.header
@@ -723,7 +723,7 @@ define void @test_sink_store_to_local_object_only_loop_may_not_execute(i8 %n) wr
; CHECK-LABEL: @test_sink_store_to_local_object_only_loop_may_not_execute(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[A:%.*]] = alloca i8, align 1
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i8, i8* [[A]], align 1
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i8, ptr [[A]], align 1
; CHECK-NEXT: br label [[LOOP_HEADER:%.*]]
; CHECK: loop.header:
; CHECK-NEXT: [[DIV1:%.*]] = phi i8 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[DIV:%.*]], [[LOOP_LATCH:%.*]] ]
@@ -736,7 +736,7 @@ define void @test_sink_store_to_local_object_only_loop_may_not_execute(i8 %n) wr
; CHECK-NEXT: br label [[LOOP_HEADER]]
; CHECK: exit:
; CHECK-NEXT: [[DIV1_LCSSA:%.*]] = phi i8 [ [[DIV1]], [[LOOP_HEADER]] ]
-; CHECK-NEXT: store i8 [[DIV1_LCSSA]], i8* [[A]], align 1
+; CHECK-NEXT: store i8 [[DIV1_LCSSA]], ptr [[A]], align 1
; CHECK-NEXT: ret void
;
entry:
@@ -750,7 +750,7 @@ loop.header:
loop.latch:
%div = sdiv i8 %i, 3
- store i8 %div, i8* %a, align 1
+ store i8 %div, ptr %a, align 1
%add = add i8 %i, 4
br label %loop.header
@@ -758,14 +758,14 @@ exit:
ret void
}
-declare dereferenceable(8) noalias i8* @alloc_writeonly() writeonly
+declare dereferenceable(8) noalias ptr @alloc_writeonly() writeonly
define void @test_sink_store_to_noalias_call_object_only_loop_may_not_execute1(i8 %n) writeonly {
; CHECK: Function Attrs: writeonly
; CHECK-LABEL: @test_sink_store_to_noalias_call_object_only_loop_may_not_execute1(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[A:%.*]] = call noalias dereferenceable(8) i8* @alloc_writeonly()
-; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i8, i8* [[A]], align 1
+; CHECK-NEXT: [[A:%.*]] = call noalias dereferenceable(8) ptr @alloc_writeonly()
+; CHECK-NEXT: [[A_PROMOTED:%.*]] = load i8, ptr [[A]], align 1
; CHECK-NEXT: br label [[LOOP_HEADER:%.*]]
; CHECK: loop.header:
; CHECK-NEXT: [[DIV1:%.*]] = phi i8 [ [[A_PROMOTED]], [[ENTRY:%.*]] ], [ [[DIV:%.*]], [[LOOP_LATCH:%.*]] ]
@@ -778,11 +778,11 @@ define void @test_sink_store_to_noalias_call_object_only_loop_may_not_execute1(i
; CHECK-NEXT: br label [[LOOP_HEADER]]
; CHECK: exit:
; CHECK-NEXT: [[DIV1_LCSSA:%.*]] = phi i8 [ [[DIV1]], [[LOOP_HEADER]] ]
-; CHECK-NEXT: store i8 [[DIV1_LCSSA]], i8* [[A]], align 1
+; CHECK-NEXT: store i8 [[DIV1_LCSSA]], ptr [[A]], align 1
; CHECK-NEXT: ret void
;
entry:
- %a = call dereferenceable(8) noalias i8* @alloc_writeonly()
+ %a = call dereferenceable(8) noalias ptr @alloc_writeonly()
br label %loop.header
loop.header:
@@ -792,7 +792,7 @@ loop.header:
loop.latch:
%div = sdiv i8 %i, 3
- store i8 %div, i8* %a, align 1
+ store i8 %div, ptr %a, align 1
%add = add i8 %i, 4
br label %loop.header
@@ -813,7 +813,7 @@ define void @test_sink_store_only_no_phi_needed() writeonly {
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
; CHECK: exit:
; CHECK-NEXT: [[DIV_LCSSA:%.*]] = phi i8 [ [[DIV]], [[LOOP]] ]
-; CHECK-NEXT: store i8 [[DIV_LCSSA]], i8* @glb, align 1
+; CHECK-NEXT: store i8 [[DIV_LCSSA]], ptr @glb, align 1
; CHECK-NEXT: ret void
;
entry:
@@ -823,7 +823,7 @@ loop:
%i = phi i8 [ 0, %entry ], [ %add, %loop ]
%cmp = icmp ult i8 %i, 4
%div = sdiv i8 %i, 3
- store i8 %div, i8* @glb, align 1
+ store i8 %div, ptr @glb, align 1
%add = add i8 %i, 4
br i1 %cmp, label %loop, label %exit
@@ -831,7 +831,7 @@ exit:
ret void
}
-define void @sink_store_lcssa_phis(i32* %ptr, i1 %c) {
+define void @sink_store_lcssa_phis(ptr %ptr, i1 %c) {
; CHECK-LABEL: @sink_store_lcssa_phis(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP_1_HEADER:%.*]]
@@ -849,7 +849,7 @@ define void @sink_store_lcssa_phis(i32* %ptr, i1 %c) {
; CHECK-NEXT: br label [[LOOP_3_HEADER]]
; CHECK: loop.2.latch:
; CHECK-NEXT: [[I_11_LCSSA:%.*]] = phi i32 [ [[I_11]], [[LOOP_3_HEADER]] ]
-; CHECK-NEXT: store i32 [[I_11_LCSSA]], i32* [[PTR:%.*]], align 4
+; CHECK-NEXT: store i32 [[I_11_LCSSA]], ptr [[PTR:%.*]], align 4
; CHECK-NEXT: br label [[LOOP_2_HEADER]]
; CHECK: loop.1.latch:
; CHECK-NEXT: br i1 [[C:%.*]], label [[LOOP_1_HEADER]], label [[EXIT:%.*]]
@@ -870,7 +870,7 @@ loop.3.header:
br i1 true, label %loop.3.latch, label %loop.2.latch
loop.3.latch:
- store i32 %i.1, i32* %ptr, align 4
+ store i32 %i.1, ptr %ptr, align 4
br label %loop.3.header
loop.2.latch:
@@ -884,9 +884,9 @@ exit:
}
; TODO: The store can be promoted, as sret memory is writable.
-define void @sret_cond_store(i32* sret(i32) noalias %ptr) {
+define void @sret_cond_store(ptr sret(i32) noalias %ptr) {
; CHECK-LABEL: @sret_cond_store(
-; CHECK-NEXT: [[PTR_PROMOTED:%.*]] = load i32, i32* [[PTR:%.*]], align 4
+; CHECK-NEXT: [[PTR_PROMOTED:%.*]] = load i32, ptr [[PTR:%.*]], align 4
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[V_INC1:%.*]] = phi i32 [ [[V_INC:%.*]], [[LOOP_LATCH:%.*]] ], [ [[PTR_PROMOTED]], [[TMP0:%.*]] ]
@@ -894,7 +894,7 @@ define void @sret_cond_store(i32* sret(i32) noalias %ptr) {
; CHECK-NEXT: br i1 [[C]], label [[LOOP_LATCH]], label [[EXIT:%.*]]
; CHECK: loop.latch:
; CHECK-NEXT: [[V_INC]] = add i32 [[V_INC1]], 1
-; CHECK-NEXT: store i32 [[V_INC]], i32* [[PTR]], align 4
+; CHECK-NEXT: store i32 [[V_INC]], ptr [[PTR]], align 4
; CHECK-NEXT: br label [[LOOP]]
; CHECK: exit:
; CHECK-NEXT: ret void
@@ -902,13 +902,13 @@ define void @sret_cond_store(i32* sret(i32) noalias %ptr) {
br label %loop
loop:
- %v = load i32, i32* %ptr
+ %v = load i32, ptr %ptr
%c = icmp ult i32 %v, 10
br i1 %c, label %loop.latch, label %exit
loop.latch:
%v.inc = add i32 %v, 1
- store i32 %v.inc, i32* %ptr
+ store i32 %v.inc, ptr %ptr
br label %loop
exit:
diff --git a/llvm/test/Transforms/LICM/sink-debuginfo-preserve.ll b/llvm/test/Transforms/LICM/sink-debuginfo-preserve.ll
index ea28ab4aefcc8..76b5febef95e7 100644
--- a/llvm/test/Transforms/LICM/sink-debuginfo-preserve.ll
+++ b/llvm/test/Transforms/LICM/sink-debuginfo-preserve.ll
@@ -17,7 +17,7 @@
; }
; CHECK: bb22:
-; CHECK-NEXT: store i32 0, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @g_390, i64 0, i64 1), align 4, !dbg [[storeLocation:![0-9]+]]
+; CHECK-NEXT: store i32 0, ptr getelementptr inbounds ([2 x i32], ptr @g_390, i64 0, i64 1), align 4, !dbg [[storeLocation:![0-9]+]]
; CHECK: [[storeLocation]] = !DILocation(line: 0
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
@@ -30,7 +30,7 @@ target triple = "x86_64-apple-macosx10.15.0"
define i32 @main() local_unnamed_addr !dbg !22 {
bb:
- %i = load volatile i32, i32* @b, align 4, !dbg !37, !tbaa !40
+ %i = load volatile i32, ptr @b, align 4, !dbg !37, !tbaa !40
%i1 = icmp sgt i32 %i, -9, !dbg !44
br i1 %i1, label %bb2, label %bb4, !dbg !45
@@ -41,7 +41,7 @@ bb3: ; preds = %bb8
br label %bb4, !dbg !45
bb4: ; preds = %bb3, %bb
- %i5 = load volatile i32, i32* @c, align 4, !dbg !46, !tbaa !40
+ %i5 = load volatile i32, ptr @c, align 4, !dbg !46, !tbaa !40
%i6 = icmp slt i32 %i5, 6, !dbg !47
br i1 %i6, label %bb7, label %bb23, !dbg !48
@@ -49,26 +49,26 @@ bb7: ; preds = %bb4
br label %bb13, !dbg !48
bb8: ; preds = %bb8, %bb2
- %i9 = load volatile i32, i32* @b, align 4, !dbg !49, !tbaa !40
+ %i9 = load volatile i32, ptr @b, align 4, !dbg !49, !tbaa !40
%i10 = add nsw i32 %i9, -1, !dbg !49
- store volatile i32 %i10, i32* @b, align 4, !dbg !49, !tbaa !40
- %i11 = load volatile i32, i32* @b, align 4, !dbg !37, !tbaa !40
+ store volatile i32 %i10, ptr @b, align 4, !dbg !49, !tbaa !40
+ %i11 = load volatile i32, ptr @b, align 4, !dbg !37, !tbaa !40
%i12 = icmp sgt i32 %i11, -9, !dbg !44
br i1 %i12, label %bb8, label %bb3, !dbg !45, !llvm.loop !50
bb13: ; preds = %bb17, %bb7
- store i32 0, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @g_390, i64 0, i64 1), align 4, !dbg !53, !tbaa !40
- %i14 = load volatile i32, i32* @b, align 4, !dbg !54, !tbaa !40
+ store i32 0, ptr getelementptr inbounds ([2 x i32], ptr @g_390, i64 0, i64 1), align 4, !dbg !53, !tbaa !40
+ %i14 = load volatile i32, ptr @b, align 4, !dbg !54, !tbaa !40
%i15 = icmp eq i32 %i14, 0, !dbg !54
br i1 %i15, label %bb16, label %bb17, !dbg !55
bb16: ; preds = %bb13
- store i32 0, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @g_390, i64 0, i64 1), align 4, !dbg !56, !tbaa !40
+ store i32 0, ptr getelementptr inbounds ([2 x i32], ptr @g_390, i64 0, i64 1), align 4, !dbg !56, !tbaa !40
br label %bb17
bb17: ; preds = %bb16, %bb13
- %i18 = load volatile i32, i32* @c, align 4, !dbg !57, !tbaa !40
- %i20 = load volatile i32, i32* @c, align 4, !dbg !46, !tbaa !40
+ %i18 = load volatile i32, ptr @c, align 4, !dbg !57, !tbaa !40
+ %i20 = load volatile i32, ptr @c, align 4, !dbg !46, !tbaa !40
%i21 = icmp slt i32 %i20, 6, !dbg !47
br i1 %i21, label %bb13, label %bb22, !dbg !48, !llvm.loop !58
diff --git a/llvm/test/Transforms/LICM/sink-foldable.ll b/llvm/test/Transforms/LICM/sink-foldable.ll
index cdeb02a124404..3b2ea4cc15243 100644
--- a/llvm/test/Transforms/LICM/sink-foldable.ll
+++ b/llvm/test/Transforms/LICM/sink-foldable.ll
@@ -5,7 +5,7 @@
target triple = "aarch64--linux-gnueabi"
-define i8** @test1(i32 %j, i8** readonly %P, i8* readnone %Q) {
+define ptr @test1(i32 %j, ptr readonly %P, ptr readnone %Q) {
; CHECK-LABEL: @test1(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP0:%.*]] = icmp slt i32 0, [[J:%.*]]
@@ -13,29 +13,29 @@ define i8** @test1(i32 %j, i8** readonly %P, i8* readnone %Q) {
; CHECK: for.body.lr.ph:
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
-; CHECK-NEXT: [[P_ADDR:%.*]] = phi i8** [ [[P:%.*]], [[FOR_BODY_LR_PH]] ], [ [[ARRAYIDX0:%.*]], [[IF_END:%.*]] ]
+; CHECK-NEXT: [[P_ADDR:%.*]] = phi ptr [ [[P:%.*]], [[FOR_BODY_LR_PH]] ], [ [[ARRAYIDX0:%.*]], [[IF_END:%.*]] ]
; CHECK-NEXT: [[I0:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[I_ADD:%.*]], [[IF_END]] ]
; CHECK-NEXT: [[I0_EXT:%.*]] = sext i32 [[I0]] to i64
-; CHECK-NEXT: [[ARRAYIDX0]] = getelementptr inbounds i8*, i8** [[P_ADDR]], i64 [[I0_EXT]]
-; CHECK-NEXT: [[L0:%.*]] = load i8*, i8** [[ARRAYIDX0]], align 8
-; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8* [[L0]], [[Q:%.*]]
+; CHECK-NEXT: [[ARRAYIDX0]] = getelementptr inbounds ptr, ptr [[P_ADDR]], i64 [[I0_EXT]]
+; CHECK-NEXT: [[L0:%.*]] = load ptr, ptr [[ARRAYIDX0]], align 8
+; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt ptr [[L0]], [[Q:%.*]]
; CHECK-NEXT: br i1 [[CMP1]], label [[LOOPEXIT0:%.*]], label [[IF_END]]
; CHECK: if.end:
-; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8*, i8** [[ARRAYIDX0]], i64 1
-; CHECK-NEXT: [[L1:%.*]] = load i8*, i8** [[ARRAYIDX1]], align 8
-; CHECK-NEXT: [[CMP4:%.*]] = icmp ugt i8* [[L1]], [[Q]]
+; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds ptr, ptr [[ARRAYIDX0]], i64 1
+; CHECK-NEXT: [[L1:%.*]] = load ptr, ptr [[ARRAYIDX1]], align 8
+; CHECK-NEXT: [[CMP4:%.*]] = icmp ugt ptr [[L1]], [[Q]]
; CHECK-NEXT: [[I_ADD]] = add nsw i32 [[I0]], 2
; CHECK-NEXT: br i1 [[CMP4]], label [[LOOPEXIT1:%.*]], label [[FOR_BODY]]
; CHECK: loopexit0:
-; CHECK-NEXT: [[P1:%.*]] = phi i8** [ [[ARRAYIDX0]], [[FOR_BODY]] ]
+; CHECK-NEXT: [[P1:%.*]] = phi ptr [ [[ARRAYIDX0]], [[FOR_BODY]] ]
; CHECK-NEXT: br label [[RETURN]]
; CHECK: loopexit1:
-; CHECK-NEXT: [[ARRAYIDX0_LCSSA:%.*]] = phi i8** [ [[ARRAYIDX0]], [[IF_END]] ]
-; CHECK-NEXT: [[ARRAYIDX1_LE:%.*]] = getelementptr inbounds i8*, i8** [[ARRAYIDX0_LCSSA]], i64 1
+; CHECK-NEXT: [[ARRAYIDX0_LCSSA:%.*]] = phi ptr [ [[ARRAYIDX0]], [[IF_END]] ]
+; CHECK-NEXT: [[ARRAYIDX1_LE:%.*]] = getelementptr inbounds ptr, ptr [[ARRAYIDX0_LCSSA]], i64 1
; CHECK-NEXT: br label [[RETURN]]
; CHECK: return:
-; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i8** [ [[P1]], [[LOOPEXIT0]] ], [ [[ARRAYIDX1_LE]], [[LOOPEXIT1]] ], [ null, [[ENTRY:%.*]] ]
-; CHECK-NEXT: ret i8** [[RETVAL_0]]
+; CHECK-NEXT: [[RETVAL_0:%.*]] = phi ptr [ [[P1]], [[LOOPEXIT0]] ], [ [[ARRAYIDX1_LE]], [[LOOPEXIT1]] ], [ null, [[ENTRY:%.*]] ]
+; CHECK-NEXT: ret ptr [[RETVAL_0]]
;
entry:
%cmp0 = icmp slt i32 0, %j
@@ -45,123 +45,123 @@ for.body.lr.ph:
br label %for.body
for.body:
- %P.addr = phi i8** [ %P, %for.body.lr.ph ], [ %arrayidx0, %if.end ]
+ %P.addr = phi ptr [ %P, %for.body.lr.ph ], [ %arrayidx0, %if.end ]
%i0 = phi i32 [ 0, %for.body.lr.ph ], [ %i.add, %if.end]
%i0.ext = sext i32 %i0 to i64
- %arrayidx0 = getelementptr inbounds i8*, i8** %P.addr, i64 %i0.ext
- %l0 = load i8*, i8** %arrayidx0, align 8
- %cmp1 = icmp ugt i8* %l0, %Q
+ %arrayidx0 = getelementptr inbounds ptr, ptr %P.addr, i64 %i0.ext
+ %l0 = load ptr, ptr %arrayidx0, align 8
+ %cmp1 = icmp ugt ptr %l0, %Q
br i1 %cmp1, label %loopexit0, label %if.end
if.end: ; preds = %for.body
- %arrayidx1 = getelementptr inbounds i8*, i8** %arrayidx0, i64 1
- %l1 = load i8*, i8** %arrayidx1, align 8
- %cmp4 = icmp ugt i8* %l1, %Q
+ %arrayidx1 = getelementptr inbounds ptr, ptr %arrayidx0, i64 1
+ %l1 = load ptr, ptr %arrayidx1, align 8
+ %cmp4 = icmp ugt ptr %l1, %Q
%i.add = add nsw i32 %i0, 2
br i1 %cmp4, label %loopexit1, label %for.body
loopexit0:
- %p1 = phi i8** [%arrayidx0, %for.body]
+ %p1 = phi ptr [%arrayidx0, %for.body]
br label %return
loopexit1:
- %p2 = phi i8** [%arrayidx1, %if.end]
+ %p2 = phi ptr [%arrayidx1, %if.end]
br label %return
return:
- %retval.0 = phi i8** [ %p1, %loopexit0 ], [%p2, %loopexit1], [ null, %entry ]
- ret i8** %retval.0
+ %retval.0 = phi ptr [ %p1, %loopexit0 ], [%p2, %loopexit1], [ null, %entry ]
+ ret ptr %retval.0
}
-define i8** @test2(i32 %j, i8** readonly %P, i8* readnone %Q) {
+define ptr @test2(i32 %j, ptr readonly %P, ptr readnone %Q) {
; CHECK-LABEL: @test2(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.cond:
; CHECK-NEXT: [[I_ADDR_0:%.*]] = phi i32 [ [[ADD:%.*]], [[IF_END:%.*]] ]
-; CHECK-NEXT: [[P_ADDR_0:%.*]] = phi i8** [ [[ADD_PTR:%.*]], [[IF_END]] ]
+; CHECK-NEXT: [[P_ADDR_0:%.*]] = phi ptr [ [[ADD_PTR:%.*]], [[IF_END]] ]
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_ADDR_0]], [[J:%.*]]
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[LOOPEXIT0:%.*]]
; CHECK: for.body:
-; CHECK-NEXT: [[P_ADDR:%.*]] = phi i8** [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[P_ADDR_0]], [[FOR_COND:%.*]] ]
+; CHECK-NEXT: [[P_ADDR:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[P_ADDR_0]], [[FOR_COND:%.*]] ]
; CHECK-NEXT: [[I_ADDR:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[I_ADDR_0]], [[FOR_COND]] ]
; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[I_ADDR]] to i64
-; CHECK-NEXT: [[ADD_PTR]] = getelementptr inbounds i8*, i8** [[P_ADDR]], i64 [[IDX_EXT]]
-; CHECK-NEXT: [[L0:%.*]] = load i8*, i8** [[ADD_PTR]], align 8
-; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8* [[L0]], [[Q:%.*]]
+; CHECK-NEXT: [[ADD_PTR]] = getelementptr inbounds ptr, ptr [[P_ADDR]], i64 [[IDX_EXT]]
+; CHECK-NEXT: [[L0:%.*]] = load ptr, ptr [[ADD_PTR]], align 8
+; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt ptr [[L0]], [[Q:%.*]]
; CHECK-NEXT: br i1 [[CMP1]], label [[LOOPEXIT1:%.*]], label [[IF_END]]
; CHECK: if.end:
; CHECK-NEXT: [[ADD_I:%.*]] = add i32 [[I_ADDR]], 1
; CHECK-NEXT: [[IDX2_EXT:%.*]] = sext i32 [[ADD_I]] to i64
-; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i8*, i8** [[ADD_PTR]], i64 [[IDX2_EXT]]
-; CHECK-NEXT: [[L1:%.*]] = load i8*, i8** [[ARRAYIDX2]], align 8
-; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8* [[L1]], [[Q]]
+; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds ptr, ptr [[ADD_PTR]], i64 [[IDX2_EXT]]
+; CHECK-NEXT: [[L1:%.*]] = load ptr, ptr [[ARRAYIDX2]], align 8
+; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt ptr [[L1]], [[Q]]
; CHECK-NEXT: [[ADD]] = add nsw i32 [[ADD_I]], 1
; CHECK-NEXT: br i1 [[CMP2]], label [[LOOPEXIT2:%.*]], label [[FOR_COND]]
; CHECK: loopexit0:
-; CHECK-NEXT: [[P0:%.*]] = phi i8** [ null, [[FOR_COND]] ]
+; CHECK-NEXT: [[P0:%.*]] = phi ptr [ null, [[FOR_COND]] ]
; CHECK-NEXT: br label [[RETURN:%.*]]
; CHECK: loopexit1:
-; CHECK-NEXT: [[P1:%.*]] = phi i8** [ [[ADD_PTR]], [[FOR_BODY]] ]
+; CHECK-NEXT: [[P1:%.*]] = phi ptr [ [[ADD_PTR]], [[FOR_BODY]] ]
; CHECK-NEXT: br label [[RETURN]]
; CHECK: loopexit2:
; CHECK-NEXT: [[IDX2_EXT_LCSSA:%.*]] = phi i64 [ [[IDX2_EXT]], [[IF_END]] ]
-; CHECK-NEXT: [[ADD_PTR_LCSSA:%.*]] = phi i8** [ [[ADD_PTR]], [[IF_END]] ]
-; CHECK-NEXT: [[ARRAYIDX2_LE:%.*]] = getelementptr inbounds i8*, i8** [[ADD_PTR_LCSSA]], i64 [[IDX2_EXT_LCSSA]]
+; CHECK-NEXT: [[ADD_PTR_LCSSA:%.*]] = phi ptr [ [[ADD_PTR]], [[IF_END]] ]
+; CHECK-NEXT: [[ARRAYIDX2_LE:%.*]] = getelementptr inbounds ptr, ptr [[ADD_PTR_LCSSA]], i64 [[IDX2_EXT_LCSSA]]
; CHECK-NEXT: br label [[RETURN]]
; CHECK: return:
-; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i8** [ [[P1]], [[LOOPEXIT1]] ], [ [[ARRAYIDX2_LE]], [[LOOPEXIT2]] ], [ [[P0]], [[LOOPEXIT0]] ]
-; CHECK-NEXT: ret i8** [[RETVAL_0]]
+; CHECK-NEXT: [[RETVAL_0:%.*]] = phi ptr [ [[P1]], [[LOOPEXIT1]] ], [ [[ARRAYIDX2_LE]], [[LOOPEXIT2]] ], [ [[P0]], [[LOOPEXIT0]] ]
+; CHECK-NEXT: ret ptr [[RETVAL_0]]
;
entry:
br label %for.body
for.cond:
%i.addr.0 = phi i32 [ %add, %if.end ]
- %P.addr.0 = phi i8** [ %add.ptr, %if.end ]
+ %P.addr.0 = phi ptr [ %add.ptr, %if.end ]
%cmp = icmp slt i32 %i.addr.0, %j
br i1 %cmp, label %for.body, label %loopexit0
for.body:
- %P.addr = phi i8** [ %P, %entry ], [ %P.addr.0, %for.cond ]
+ %P.addr = phi ptr [ %P, %entry ], [ %P.addr.0, %for.cond ]
%i.addr = phi i32 [ 0, %entry ], [ %i.addr.0, %for.cond ]
%idx.ext = sext i32 %i.addr to i64
- %add.ptr = getelementptr inbounds i8*, i8** %P.addr, i64 %idx.ext
- %l0 = load i8*, i8** %add.ptr, align 8
+ %add.ptr = getelementptr inbounds ptr, ptr %P.addr, i64 %idx.ext
+ %l0 = load ptr, ptr %add.ptr, align 8
- %cmp1 = icmp ugt i8* %l0, %Q
+ %cmp1 = icmp ugt ptr %l0, %Q
br i1 %cmp1, label %loopexit1, label %if.end
if.end:
%add.i = add i32 %i.addr, 1
%idx2.ext = sext i32 %add.i to i64
- %arrayidx2 = getelementptr inbounds i8*, i8** %add.ptr, i64 %idx2.ext
- %l1 = load i8*, i8** %arrayidx2, align 8
- %cmp2 = icmp ugt i8* %l1, %Q
+ %arrayidx2 = getelementptr inbounds ptr, ptr %add.ptr, i64 %idx2.ext
+ %l1 = load ptr, ptr %arrayidx2, align 8
+ %cmp2 = icmp ugt ptr %l1, %Q
%add = add nsw i32 %add.i, 1
br i1 %cmp2, label %loopexit2, label %for.cond
loopexit0:
- %p0 = phi i8** [ null, %for.cond ]
+ %p0 = phi ptr [ null, %for.cond ]
br label %return
loopexit1:
- %p1 = phi i8** [ %add.ptr, %for.body ]
+ %p1 = phi ptr [ %add.ptr, %for.body ]
br label %return
loopexit2:
- %p2 = phi i8** [ %arrayidx2, %if.end ]
+ %p2 = phi ptr [ %arrayidx2, %if.end ]
br label %return
return:
- %retval.0 = phi i8** [ %p1, %loopexit1 ], [ %p2, %loopexit2 ], [ %p0, %loopexit0 ]
- ret i8** %retval.0
+ %retval.0 = phi ptr [ %p1, %loopexit1 ], [ %p2, %loopexit2 ], [ %p0, %loopexit0 ]
+ ret ptr %retval.0
}
-define i8** @test3(i64 %j, i8** readonly %P, i8* readnone %Q) {
+define ptr @test3(i64 %j, ptr readonly %P, ptr readnone %Q) {
; CHECK-LABEL: @test3(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP0:%.*]] = icmp slt i64 0, [[J:%.*]]
@@ -169,34 +169,34 @@ define i8** @test3(i64 %j, i8** readonly %P, i8* readnone %Q) {
; CHECK: for.body.lr.ph:
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
; CHECK: for.body:
-; CHECK-NEXT: [[P_ADDR:%.*]] = phi i8** [ [[P:%.*]], [[FOR_BODY_LR_PH]] ], [ [[ARRAYIDX0:%.*]], [[IF_END:%.*]] ]
+; CHECK-NEXT: [[P_ADDR:%.*]] = phi ptr [ [[P:%.*]], [[FOR_BODY_LR_PH]] ], [ [[ARRAYIDX0:%.*]], [[IF_END:%.*]] ]
; CHECK-NEXT: [[I0:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[I_ADD:%.*]], [[IF_END]] ]
; CHECK-NEXT: [[I0_EXT:%.*]] = sext i32 [[I0]] to i64
-; CHECK-NEXT: [[ARRAYIDX0]] = getelementptr inbounds i8*, i8** [[P_ADDR]], i64 [[I0_EXT]]
-; CHECK-NEXT: [[L0:%.*]] = load i8*, i8** [[ARRAYIDX0]], align 8
-; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8* [[L0]], [[Q:%.*]]
+; CHECK-NEXT: [[ARRAYIDX0]] = getelementptr inbounds ptr, ptr [[P_ADDR]], i64 [[I0_EXT]]
+; CHECK-NEXT: [[L0:%.*]] = load ptr, ptr [[ARRAYIDX0]], align 8
+; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt ptr [[L0]], [[Q:%.*]]
; CHECK-NEXT: br i1 [[CMP1]], label [[LOOPEXIT0:%.*]], label [[IF_END]]
; CHECK: if.end:
; CHECK-NEXT: [[ADD:%.*]] = add i64 [[I0_EXT]], 1
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i64 [[ADD]] to i32
-; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8*, i8** [[P_ADDR]], i32 [[TRUNC]]
-; CHECK-NEXT: [[L1:%.*]] = load i8*, i8** [[ARRAYIDX1]], align 8
-; CHECK-NEXT: [[CMP4:%.*]] = icmp ugt i8* [[L1]], [[Q]]
+; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds ptr, ptr [[P_ADDR]], i32 [[TRUNC]]
+; CHECK-NEXT: [[L1:%.*]] = load ptr, ptr [[ARRAYIDX1]], align 8
+; CHECK-NEXT: [[CMP4:%.*]] = icmp ugt ptr [[L1]], [[Q]]
; CHECK-NEXT: [[I_ADD]] = add nsw i32 [[I0]], 2
; CHECK-NEXT: br i1 [[CMP4]], label [[LOOPEXIT1:%.*]], label [[FOR_BODY]]
; CHECK: loopexit0:
-; CHECK-NEXT: [[P1:%.*]] = phi i8** [ [[ARRAYIDX0]], [[FOR_BODY]] ]
+; CHECK-NEXT: [[P1:%.*]] = phi ptr [ [[ARRAYIDX0]], [[FOR_BODY]] ]
; CHECK-NEXT: br label [[RETURN]]
; CHECK: loopexit1:
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i64 [ [[ADD]], [[IF_END]] ]
-; CHECK-NEXT: [[P_ADDR_LCSSA:%.*]] = phi i8** [ [[P_ADDR]], [[IF_END]] ]
+; CHECK-NEXT: [[P_ADDR_LCSSA:%.*]] = phi ptr [ [[P_ADDR]], [[IF_END]] ]
; CHECK-NEXT: [[TRUNC_LE:%.*]] = trunc i64 [[ADD_LCSSA]] to i32
-; CHECK-NEXT: [[ARRAYIDX1_LE:%.*]] = getelementptr inbounds i8*, i8** [[P_ADDR_LCSSA]], i32 [[TRUNC_LE]]
+; CHECK-NEXT: [[ARRAYIDX1_LE:%.*]] = getelementptr inbounds ptr, ptr [[P_ADDR_LCSSA]], i32 [[TRUNC_LE]]
; CHECK-NEXT: call void @dummy(i32 [[TRUNC_LE]])
; CHECK-NEXT: br label [[RETURN]]
; CHECK: return:
-; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i8** [ [[P1]], [[LOOPEXIT0]] ], [ [[ARRAYIDX1_LE]], [[LOOPEXIT1]] ], [ null, [[ENTRY:%.*]] ]
-; CHECK-NEXT: ret i8** [[RETVAL_0]]
+; CHECK-NEXT: [[RETVAL_0:%.*]] = phi ptr [ [[P1]], [[LOOPEXIT0]] ], [ [[ARRAYIDX1_LE]], [[LOOPEXIT1]] ], [ null, [[ENTRY:%.*]] ]
+; CHECK-NEXT: ret ptr [[RETVAL_0]]
;
entry:
%cmp0 = icmp slt i64 0, %j
@@ -206,36 +206,36 @@ for.body.lr.ph:
br label %for.body
for.body:
- %P.addr = phi i8** [ %P, %for.body.lr.ph ], [ %arrayidx0, %if.end ]
+ %P.addr = phi ptr [ %P, %for.body.lr.ph ], [ %arrayidx0, %if.end ]
%i0 = phi i32 [ 0, %for.body.lr.ph ], [ %i.add, %if.end]
%i0.ext = sext i32 %i0 to i64
- %arrayidx0 = getelementptr inbounds i8*, i8** %P.addr, i64 %i0.ext
- %l0 = load i8*, i8** %arrayidx0, align 8
- %cmp1 = icmp ugt i8* %l0, %Q
+ %arrayidx0 = getelementptr inbounds ptr, ptr %P.addr, i64 %i0.ext
+ %l0 = load ptr, ptr %arrayidx0, align 8
+ %cmp1 = icmp ugt ptr %l0, %Q
br i1 %cmp1, label %loopexit0, label %if.end
if.end: ; preds = %for.body
%add = add i64 %i0.ext, 1
%trunc = trunc i64 %add to i32
- %arrayidx1 = getelementptr inbounds i8*, i8** %P.addr, i32 %trunc
- %l1 = load i8*, i8** %arrayidx1, align 8
- %cmp4 = icmp ugt i8* %l1, %Q
+ %arrayidx1 = getelementptr inbounds ptr, ptr %P.addr, i32 %trunc
+ %l1 = load ptr, ptr %arrayidx1, align 8
+ %cmp4 = icmp ugt ptr %l1, %Q
%i.add = add nsw i32 %i0, 2
br i1 %cmp4, label %loopexit1, label %for.body
loopexit0:
- %p1 = phi i8** [%arrayidx0, %for.body]
+ %p1 = phi ptr [%arrayidx0, %for.body]
br label %return
loopexit1:
- %p2 = phi i8** [%arrayidx1, %if.end]
+ %p2 = phi ptr [%arrayidx1, %if.end]
call void @dummy(i32 %trunc)
br label %return
return:
- %retval.0 = phi i8** [ %p1, %loopexit0 ], [%p2, %loopexit1], [ null, %entry ]
- ret i8** %retval.0
+ %retval.0 = phi ptr [ %p1, %loopexit0 ], [%p2, %loopexit1], [ null, %entry ]
+ ret ptr %retval.0
}
declare void @dummy(i32)
diff --git a/llvm/test/Transforms/LICM/sink-promote.ll b/llvm/test/Transforms/LICM/sink-promote.ll
index ac05af5a6400d..bca11c94895a6 100644
--- a/llvm/test/Transforms/LICM/sink-promote.ll
+++ b/llvm/test/Transforms/LICM/sink-promote.ll
@@ -4,7 +4,7 @@
; a memory location in a loop.
; Store can be sunk out of exit block containing indirectbr instructions after
; D50925. Updated to use an argument instead of undef, due to PR38989.
-define void @test12(i32* %ptr) {
+define void @test12(ptr %ptr) {
; CHECK-LABEL: @test12
; CHECK: store
; CHECK-NEXT: br label %lab4
@@ -38,13 +38,13 @@ lab21:
; CHECK: lab21:
; CHECK-NOT: store
; CHECK: br i1 false, label %lab21, label %lab22
- store i32 36127957, i32* %ptr, align 4
+ store i32 36127957, ptr %ptr, align 4
br i1 undef, label %lab21, label %lab22
lab22:
; CHECK: lab22:
; CHECK-NOT: store
-; CHECK-NEXT: indirectbr i8* undef
- indirectbr i8* undef, [label %lab5, label %lab6, label %lab7]
+; CHECK-NEXT: indirectbr ptr undef
+ indirectbr ptr undef, [label %lab5, label %lab6, label %lab7]
}
diff --git a/llvm/test/Transforms/LICM/sink-with-coroutine.ll b/llvm/test/Transforms/LICM/sink-with-coroutine.ll
index 04cca14a4ef3c..008fcf8afc36e 100644
--- a/llvm/test/Transforms/LICM/sink-with-coroutine.ll
+++ b/llvm/test/Transforms/LICM/sink-with-coroutine.ll
@@ -16,11 +16,11 @@ define i64 @licm(i64 %n) #0 {
; CHECK-NEXT: i8 0, label [[AWAIT_READY]]
; CHECK-NEXT: ]
; CHECK: await.ready:
-; CHECK-NEXT: store i64 1, i64* [[P]], align 4
+; CHECK-NEXT: store i64 1, ptr [[P]], align 4
; CHECK-NEXT: [[T6:%.*]] = icmp ult i64 [[T5]], [[N:%.*]]
; CHECK-NEXT: br i1 [[T6]], label [[LOOP]], label [[BB2]]
; CHECK: bb2:
-; CHECK-NEXT: [[RES:%.*]] = call i1 @llvm.coro.end(i8* null, i1 false)
+; CHECK-NEXT: [[RES:%.*]] = call i1 @llvm.coro.end(ptr null, i1 false)
; CHECK-NEXT: ret i64 0
;
entry:
@@ -39,14 +39,14 @@ loop:
]
await.ready:
- store i64 1, i64* %p
+ store i64 1, ptr %p
%t6 = icmp ult i64 %t5, %n
br i1 %t6, label %loop, label %bb2
bb2:
- %res = call i1 @llvm.coro.end(i8* null, i1 false)
+ %res = call i1 @llvm.coro.end(ptr null, i1 false)
ret i64 0
}
declare i8 @llvm.coro.suspend(token, i1)
-declare i1 @llvm.coro.end(i8*, i1)
+declare i1 @llvm.coro.end(ptr, i1)
diff --git a/llvm/test/Transforms/LICM/sinking-debugify.ll b/llvm/test/Transforms/LICM/sinking-debugify.ll
index eb768a5e05b38..b3c0be30841d8 100644
--- a/llvm/test/Transforms/LICM/sinking-debugify.ll
+++ b/llvm/test/Transforms/LICM/sinking-debugify.ll
@@ -10,18 +10,16 @@
; turned into an "implicit location" using DW_OP_stack_value.
define void @test11() {
; CHECK-LABEL: @test11(
-; CHECK-NEXT: br label [[LOOP:%.*]], !dbg [[DBG12:![0-9]+]]
+; CHECK-NEXT: br label [[LOOP:%.*]], !dbg [[DBG11:![0-9]+]]
; CHECK: Loop:
-; CHECK-NEXT: call void @llvm.dbg.value(metadata %Ty* @X2, metadata [[META9:![0-9]+]], metadata !DIExpression()), !dbg [[DBG13:![0-9]+]]
-; CHECK-NEXT: call void @llvm.dbg.value(metadata %Ty* @X2, metadata [[META11:![0-9]+]], metadata !DIExpression(DW_OP_plus_uconst, 4, DW_OP_stack_value)), !dbg [[DBG14:![0-9]+]]
-; CHECK-NEXT: br i1 false, label [[LOOP]], label [[OUT:%.*]], !dbg [[DBG15:![0-9]+]]
+; CHECK-NEXT: call void @llvm.dbg.value(metadata ptr @X2, metadata [[META9:![0-9]+]], metadata !DIExpression(DW_OP_plus_uconst, 4, DW_OP_stack_value)), !dbg [[DBG12:![0-9]+]]
+; CHECK-NEXT: br i1 false, label [[LOOP]], label [[OUT:%.*]], !dbg [[DBG13:![0-9]+]]
; CHECK: Out:
-; CHECK-NEXT: ret void, !dbg [[DBG16:![0-9]+]]
+; CHECK-NEXT: ret void, !dbg [[DBG14:![0-9]+]]
;
br label %Loop
Loop:
- %dead1 = getelementptr %Ty, %Ty* @X2, i64 0, i32 0
- %dead2 = getelementptr %Ty, %Ty* @X2, i64 0, i32 1
+ %dead2 = getelementptr %Ty, ptr @X2, i64 0, i32 1
br i1 false, label %Loop, label %Out
Out:
ret void
diff --git a/llvm/test/Transforms/LICM/sinking.ll b/llvm/test/Transforms/LICM/sinking.ll
index 63d97afe150ba..037c12b30cfca 100644
--- a/llvm/test/Transforms/LICM/sinking.ll
+++ b/llvm/test/Transforms/LICM/sinking.ll
@@ -2,24 +2,24 @@
; RUN: opt < %s -basic-aa -licm -S -verify-memoryssa | FileCheck %s
-declare i32 @strlen(i8*) readonly nounwind willreturn
+declare i32 @strlen(ptr) readonly nounwind willreturn
declare void @foo()
; Sink readonly function.
-define i32 @test1(i8* %P) {
+define i32 @test1(ptr %P) {
; CHECK-LABEL: @test1(
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: br i1 false, label [[LOOP]], label [[OUT:%.*]]
; CHECK: Out:
-; CHECK-NEXT: [[A_LE:%.*]] = call i32 @strlen(i8* [[P:%.*]]) #[[ATTR3:[0-9]+]]
+; CHECK-NEXT: [[A_LE:%.*]] = call i32 @strlen(ptr [[P:%.*]]) #[[ATTR3:[0-9]+]]
; CHECK-NEXT: ret i32 [[A_LE]]
;
br label %Loop
Loop: ; preds = %Loop, %0
- %A = call i32 @strlen( i8* %P ) readonly
+ %A = call i32 @strlen( ptr %P ) readonly
br i1 false, label %Loop, label %Out
Out: ; preds = %Loop
@@ -72,21 +72,21 @@ Out: ; preds = %Loop
ret i32 %A
}
-define double @test2c(double* %P) {
+define double @test2c(ptr %P) {
; CHECK-LABEL: @test2c(
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: call void @foo()
; CHECK-NEXT: br i1 true, label [[LOOP]], label [[OUT:%.*]]
; CHECK: Out:
-; CHECK-NEXT: [[A_LE:%.*]] = load double, double* [[P:%.*]], align 8, !invariant.load !0
+; CHECK-NEXT: [[A_LE:%.*]] = load double, ptr [[P:%.*]], align 8, !invariant.load !0
; CHECK-NEXT: ret double [[A_LE]]
;
br label %Loop
Loop: ; preds = %Loop, %0
call void @foo( )
- %A = load double, double* %P, !invariant.load !{}
+ %A = load double, ptr %P, !invariant.load !{}
br i1 true, label %Loop, label %Out
Out: ; preds = %Loop
@@ -158,7 +158,7 @@ Out: ; preds = %Loop
; result of the load is only used outside of the loop, sink the load instead of
; hoisting it!
;
- at X = global i32 5 ; <i32*> [#uses=1]
+ at X = global i32 5 ; <ptr> [#uses=1]
define i32 @test5(i32 %N) {
; CHECK-LABEL: @test5(
@@ -170,14 +170,14 @@ define i32 @test5(i32 %N) {
; CHECK-NEXT: [[TMP_1:%.*]] = icmp ne i32 [[N_ADDR_0_PN]], 1
; CHECK-NEXT: br i1 [[TMP_1]], label [[LOOP]], label [[OUT:%.*]]
; CHECK: Out:
-; CHECK-NEXT: [[TMP_6_LE:%.*]] = load i32, i32* @X, align 4
+; CHECK-NEXT: [[TMP_6_LE:%.*]] = load i32, ptr @X, align 4
; CHECK-NEXT: ret i32 [[TMP_6_LE]]
;
Entry:
br label %Loop
Loop: ; preds = %Loop, %Entry
%N_addr.0.pn = phi i32 [ %dec, %Loop ], [ %N, %Entry ]
- %tmp.6 = load i32, i32* @X ; <i32> [#uses=1]
+ %tmp.6 = load i32, ptr @X ; <i32> [#uses=1]
%dec = add i32 %N_addr.0.pn, -1 ; <i32> [#uses=1]
%tmp.1 = icmp ne i32 %N_addr.0.pn, 1 ; <i1> [#uses=1]
br i1 %tmp.1, label %Loop, label %Out
@@ -201,14 +201,12 @@ define i32 @test6() {
; CHECK: Loop:
; CHECK-NEXT: br i1 false, label [[LOOP]], label [[OUT:%.*]]
; CHECK: Out:
-; CHECK-NEXT: [[DEAD_LE:%.*]] = getelementptr [[TY:%.*]], %Ty* @X2, i64 0, i32 0
-; CHECK-NEXT: [[SUNK2_LE:%.*]] = load i32, i32* [[DEAD_LE]], align 4
+; CHECK-NEXT: [[SUNK2_LE:%.*]] = load i32, ptr @X2, align 4
; CHECK-NEXT: ret i32 [[SUNK2_LE]]
;
br label %Loop
Loop:
- %dead = getelementptr %Ty, %Ty* @X2, i64 0, i32 0
- %sunk2 = load i32, i32* %dead
+ %sunk2 = load i32, ptr @X2
br i1 false, label %Loop, label %Out
Out: ; preds = %Loop
ret i32 %sunk2
@@ -262,15 +260,15 @@ Out2: ; preds = %ContLoop
; This testcase checks to make sure we can sink values which are only live on
; some exits out of the loop, and that we can do so without breaking dominator
; info.
-define i32 @test8(i1 %C1, i1 %C2, i32* %P, i32* %Q) {
+define i32 @test8(i1 %C1, i1 %C2, ptr %P, ptr %Q) {
; CHECK-LABEL: @test8(
; CHECK-NEXT: Entry:
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: Loop:
; CHECK-NEXT: br i1 [[C1:%.*]], label [[CONT:%.*]], label [[EXIT1:%.*]]
; CHECK: Cont:
-; CHECK-NEXT: [[X:%.*]] = load i32, i32* [[P:%.*]], align 4
-; CHECK-NEXT: store i32 [[X]], i32* [[Q:%.*]], align 4
+; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[P:%.*]], align 4
+; CHECK-NEXT: store i32 [[X]], ptr [[Q:%.*]], align 4
; CHECK-NEXT: br i1 [[C2:%.*]], label [[LOOP]], label [[EXIT2:%.*]]
; CHECK: exit1:
; CHECK-NEXT: ret i32 0
@@ -284,8 +282,8 @@ Entry:
Loop: ; preds = %Cont, %Entry
br i1 %C1, label %Cont, label %exit1
Cont: ; preds = %Loop
- %X = load i32, i32* %P ; <i32> [#uses=2]
- store i32 %X, i32* %Q
+ %X = load i32, ptr %P ; <i32> [#uses=2]
+ store i32 %X, ptr %Q
%V = add i32 %X, 1 ; <i32> [#uses=1]
br i1 %C2, label %Loop, label %exit2
exit1: ; preds = %Loop
@@ -374,8 +372,7 @@ define void @test11() {
;
br label %Loop
Loop:
- %dead1 = getelementptr %Ty, %Ty* @X2, i64 0, i32 0
- %dead2 = getelementptr %Ty, %Ty* @X2, i64 0, i32 1
+ %dead2 = getelementptr %Ty, ptr @X2, i64 0, i32 1
br i1 false, label %Loop, label %Out
Out:
ret void
@@ -385,34 +382,34 @@ Out:
; Test a *many* way nested loop with multiple exit blocks both of which exit
; multiple loop nests. This exercises LCSSA corner cases.
-define i32 @PR18753(i1* %a, i1* %b, i1* %c, i1* %d) {
+define i32 @PR18753(ptr %a, ptr %b, ptr %c, ptr %d) {
; CHECK-LABEL: @PR18753(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[L1_HEADER:%.*]]
; CHECK: l1.header:
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[L1_LATCH:%.*]] ], [ 0, [[ENTRY:%.*]] ]
-; CHECK-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [1 x i32], [1 x i32]* @c, i64 0, i64 [[IV]]
+; CHECK-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [1 x i32], ptr @c, i64 0, i64 [[IV]]
; CHECK-NEXT: br label [[L2_HEADER:%.*]]
; CHECK: l2.header:
-; CHECK-NEXT: [[X0:%.*]] = load i1, i1* [[C:%.*]], align 4
+; CHECK-NEXT: [[X0:%.*]] = load i1, ptr [[C:%.*]], align 4
; CHECK-NEXT: br i1 [[X0]], label [[L1_LATCH]], label [[L3_PREHEADER:%.*]]
; CHECK: l3.preheader:
; CHECK-NEXT: br label [[L3_HEADER:%.*]]
; CHECK: l3.header:
-; CHECK-NEXT: [[X1:%.*]] = load i1, i1* [[D:%.*]], align 4
+; CHECK-NEXT: [[X1:%.*]] = load i1, ptr [[D:%.*]], align 4
; CHECK-NEXT: br i1 [[X1]], label [[L2_LATCH:%.*]], label [[L4_PREHEADER:%.*]]
; CHECK: l4.preheader:
; CHECK-NEXT: br label [[L4_HEADER:%.*]]
; CHECK: l4.header:
-; CHECK-NEXT: [[X2:%.*]] = load i1, i1* [[A:%.*]], align 1
+; CHECK-NEXT: [[X2:%.*]] = load i1, ptr [[A:%.*]], align 1
; CHECK-NEXT: br i1 [[X2]], label [[L3_LATCH:%.*]], label [[L4_BODY:%.*]]
; CHECK: l4.body:
-; CHECK-NEXT: call void @f(i32* [[ARRAYIDX_I]])
-; CHECK-NEXT: [[X3:%.*]] = load i1, i1* [[B:%.*]], align 1
+; CHECK-NEXT: call void @f(ptr [[ARRAYIDX_I]])
+; CHECK-NEXT: [[X3:%.*]] = load i1, ptr [[B:%.*]], align 1
; CHECK-NEXT: br i1 [[X3]], label [[L4_LATCH:%.*]], label [[EXIT:%.*]]
; CHECK: l4.latch:
; CHECK-NEXT: call void @g()
-; CHECK-NEXT: [[X4:%.*]] = load i1, i1* [[B]], align 4
+; CHECK-NEXT: [[X4:%.*]] = load i1, ptr [[B]], align 4
; CHECK-NEXT: br i1 [[X4]], label [[L4_HEADER]], label [[EXIT]]
; CHECK: l3.latch:
; CHECK-NEXT: br label [[L3_HEADER]]
@@ -431,36 +428,36 @@ entry:
l1.header:
%iv = phi i64 [ %iv.next, %l1.latch ], [ 0, %entry ]
- %arrayidx.i = getelementptr inbounds [1 x i32], [1 x i32]* @c, i64 0, i64 %iv
+ %arrayidx.i = getelementptr inbounds [1 x i32], ptr @c, i64 0, i64 %iv
br label %l2.header
l2.header:
- %x0 = load i1, i1* %c, align 4
+ %x0 = load i1, ptr %c, align 4
br i1 %x0, label %l1.latch, label %l3.preheader
l3.preheader:
br label %l3.header
l3.header:
- %x1 = load i1, i1* %d, align 4
+ %x1 = load i1, ptr %d, align 4
br i1 %x1, label %l2.latch, label %l4.preheader
l4.preheader:
br label %l4.header
l4.header:
- %x2 = load i1, i1* %a
+ %x2 = load i1, ptr %a
br i1 %x2, label %l3.latch, label %l4.body
l4.body:
- call void @f(i32* %arrayidx.i)
- %x3 = load i1, i1* %b
+ call void @f(ptr %arrayidx.i)
+ %x3 = load i1, ptr %b
%l = trunc i64 %iv to i32
br i1 %x3, label %l4.latch, label %exit
l4.latch:
call void @g()
- %x4 = load i1, i1* %b, align 4
+ %x4 = load i1, ptr %b, align 4
br i1 %x4, label %l4.header, label %exit
l3.latch:
@@ -500,10 +497,10 @@ define void @test13() {
; CHECK: lab38:
; CHECK-NEXT: ret void
; CHECK: lab59:
-; CHECK-NEXT: indirectbr i8* undef, [label [[LAB60]], label %lab38]
+; CHECK-NEXT: indirectbr ptr undef, [label [[LAB60]], label %lab38]
; CHECK: lab60:
-; CHECK-NEXT: store i32 2145244101, i32* undef, align 4
-; CHECK-NEXT: indirectbr i8* undef, [label [[LAB21:%.*]], label %lab19]
+; CHECK-NEXT: store i32 2145244101, ptr undef, align 4
+; CHECK-NEXT: indirectbr ptr undef, [label [[LAB21:%.*]], label %lab19]
;
br label %lab59
@@ -523,11 +520,11 @@ lab38:
ret void
lab59:
- indirectbr i8* undef, [label %lab60, label %lab38]
+ indirectbr ptr undef, [label %lab60, label %lab38]
lab60:
- store i32 2145244101, i32* undef, align 4
- indirectbr i8* undef, [label %lab21, label %lab19]
+ store i32 2145244101, ptr undef, align 4
+ indirectbr ptr undef, [label %lab21, label %lab19]
}
; Check if LICM can sink a sinkable instruction the exit blocks through
@@ -622,7 +619,7 @@ Out12:
; Sink through a non-trivially replacable PHI node which use the same sinkable
; instruction multiple times.
-define i32 @test16(i1 %c, i8** %P, i32* %P2, i64 %V) {
+define i32 @test16(i1 %c, ptr %P, ptr %P2, i64 %V) {
; CHECK-LABEL: @test16(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP_PH:%.*]]
@@ -802,19 +799,19 @@ Out12:
; Do not sink an instruction through a non-trivially replacable PHI, to avoid
; assert while splitting predecessors, if the terminator of predecessor is an
; indirectbr.
-define i32 @test19(i1 %cond, i1 %cond2, i8* %address, i32 %v1) nounwind {
+define i32 @test19(i1 %cond, i1 %cond2, ptr %address, i32 %v1) nounwind {
; CHECK-LABEL: @test19(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[INDIRECT_GOTO_DEST:%.*]] = select i1 [[COND:%.*]], i8* blockaddress(@test19, [[EXIT:%.*]]), i8* [[ADDRESS:%.*]]
-; CHECK-NEXT: [[INDIRECT_GOTO_DEST2:%.*]] = select i1 [[COND2:%.*]], i8* blockaddress(@test19, [[EXIT]]), i8* [[ADDRESS]]
+; CHECK-NEXT: [[INDIRECT_GOTO_DEST:%.*]] = select i1 [[COND:%.*]], ptr blockaddress(@test19, [[EXIT:%.*]]), ptr [[ADDRESS:%.*]]
+; CHECK-NEXT: [[INDIRECT_GOTO_DEST2:%.*]] = select i1 [[COND2:%.*]], ptr blockaddress(@test19, [[EXIT]]), ptr [[ADDRESS]]
; CHECK-NEXT: br label [[L0:%.*]]
; CHECK: L0:
; CHECK-NEXT: [[V2:%.*]] = call i32 @getv()
; CHECK-NEXT: [[SINKABLE:%.*]] = mul i32 [[V1:%.*]], [[V2]]
; CHECK-NEXT: [[SINKABLE2:%.*]] = add i32 [[V1]], [[V2]]
-; CHECK-NEXT: indirectbr i8* [[INDIRECT_GOTO_DEST]], [label [[L1:%.*]], label %exit]
+; CHECK-NEXT: indirectbr ptr [[INDIRECT_GOTO_DEST]], [label [[L1:%.*]], label %exit]
; CHECK: L1:
-; CHECK-NEXT: indirectbr i8* [[INDIRECT_GOTO_DEST2]], [label [[L0]], label %exit]
+; CHECK-NEXT: indirectbr ptr [[INDIRECT_GOTO_DEST2]], [label [[L0]], label %exit]
; CHECK: exit:
; CHECK-NEXT: [[R:%.*]] = phi i32 [ [[SINKABLE]], [[L0]] ], [ [[SINKABLE2]], [[L1]] ]
; CHECK-NEXT: ret i32 [[R]]
@@ -822,15 +819,15 @@ define i32 @test19(i1 %cond, i1 %cond2, i8* %address, i32 %v1) nounwind {
entry:
br label %L0
L0:
- %indirect.goto.dest = select i1 %cond, i8* blockaddress(@test19, %exit), i8* %address
+ %indirect.goto.dest = select i1 %cond, ptr blockaddress(@test19, %exit), ptr %address
%v2 = call i32 @getv()
%sinkable = mul i32 %v1, %v2
%sinkable2 = add i32 %v1, %v2
- indirectbr i8* %indirect.goto.dest, [label %L1, label %exit]
+ indirectbr ptr %indirect.goto.dest, [label %L1, label %exit]
L1:
- %indirect.goto.dest2 = select i1 %cond2, i8* blockaddress(@test19, %exit), i8* %address
- indirectbr i8* %indirect.goto.dest2, [label %L0, label %exit]
+ %indirect.goto.dest2 = select i1 %cond2, ptr blockaddress(@test19, %exit), ptr %address
+ indirectbr ptr %indirect.goto.dest2, [label %L0, label %exit]
exit:
%r = phi i32 [%sinkable, %L0], [%sinkable2, %L1]
@@ -840,7 +837,7 @@ exit:
; Do not sink through a non-trivially replacable PHI if splitting predecessors
; not allowed in SplitBlockPredecessors().
-define void @test20(i32* %s, i1 %b, i32 %v1, i32 %v2) personality i32 (...)* @__CxxFrameHandler3 {
+define void @test20(ptr %s, i1 %b, i32 %v1, i32 %v2) personality ptr @__CxxFrameHandler3 {
; CHECK-LABEL: @test20(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[WHILE_COND:%.*]]
@@ -858,7 +855,7 @@ define void @test20(i32* %s, i1 %b, i32 %v1, i32 %v2) personality i32 (...)* @__
; CHECK: catch.dispatch:
; CHECK-NEXT: [[DOTLCSSA1:%.*]] = phi i32 [ [[SINKABLE]], [[WHILE_BODY]] ], [ [[SINKABLE2]], [[WHILE_BODY2]] ]
; CHECK-NEXT: [[CP:%.*]] = cleanuppad within none []
-; CHECK-NEXT: store i32 [[DOTLCSSA1]], i32* [[S:%.*]], align 4
+; CHECK-NEXT: store i32 [[DOTLCSSA1]], ptr [[S:%.*]], align 4
; CHECK-NEXT: cleanupret from [[CP]] unwind to caller
; CHECK: try.cont:
; CHECK-NEXT: ret void
@@ -879,7 +876,7 @@ while.body2:
catch.dispatch:
%.lcssa1 = phi i32 [ %sinkable, %while.body ], [ %sinkable2, %while.body2 ]
%cp = cleanuppad within none []
- store i32 %.lcssa1, i32* %s
+ store i32 %.lcssa1, ptr %s
cleanupret from %cp unwind to caller
try.cont:
ret void
@@ -888,7 +885,7 @@ try.cont:
; The sinkable call should be sunk into an exit block split. After splitting
; the exit block, BlockColor for new blocks should be added properly so
; that we should be able to access valid ColorVector.
-define i32 @test21_pr36184(i8* %P) personality i32 (...)* @__CxxFrameHandler3 {
+define i32 @test21_pr36184(ptr %P) personality ptr @__CxxFrameHandler3 {
; CHECK-LABEL: @test21_pr36184(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP_PH:%.*]]
@@ -902,7 +899,7 @@ define i32 @test21_pr36184(i8* %P) personality i32 (...)* @__CxxFrameHandler3 {
; CHECK-NEXT: [[IDX_PH:%.*]] = phi i32 [ 0, [[CONTLOOP]] ]
; CHECK-NEXT: br label [[OUT:%.*]]
; CHECK: Out.split.loop.exit1:
-; CHECK-NEXT: [[SINKABLECALL_LE:%.*]] = call i32 @strlen(i8* [[P:%.*]]) #[[ATTR3]]
+; CHECK-NEXT: [[SINKABLECALL_LE:%.*]] = call i32 @strlen(ptr [[P:%.*]]) #[[ATTR3]]
; CHECK-NEXT: br label [[OUT]]
; CHECK: Out:
; CHECK-NEXT: [[IDX:%.*]] = phi i32 [ [[IDX_PH]], [[OUT_SPLIT_LOOP_EXIT]] ], [ [[SINKABLECALL_LE]], [[OUT_SPLIT_LOOP_EXIT1]] ]
@@ -915,7 +912,7 @@ loop.ph:
br label %Loop
Loop:
- %sinkableCall = call i32 @strlen( i8* %P ) readonly
+ %sinkableCall = call i32 @strlen( ptr %P ) readonly
br i1 undef, label %ContLoop, label %Out
ContLoop:
@@ -927,7 +924,7 @@ Out:
}
; We do not support splitting a landingpad block if BlockColors is not empty.
-define void @test22(i1 %b, i32 %v1, i32 %v2) personality i32 (...)* @__CxxFrameHandler3 {
+define void @test22(i1 %b, i32 %v1, i32 %v2) personality ptr @__CxxFrameHandler3 {
; CHECK-LABEL: @test22(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[WHILE_COND:%.*]]
@@ -943,8 +940,8 @@ define void @test22(i1 %b, i32 %v1, i32 %v2) personality i32 (...)* @__CxxFrameH
; CHECK-NEXT: to label [[WHILE_COND]] unwind label [[LPADBB]]
; CHECK: lpadBB:
; CHECK-NEXT: [[DOTLCSSA1:%.*]] = phi i32 [ 0, [[WHILE_BODY]] ], [ [[MUL]], [[WHILE_BODY2]] ]
-; CHECK-NEXT: [[TMP0:%.*]] = landingpad { i8*, i32 }
-; CHECK-NEXT: catch i8* null
+; CHECK-NEXT: [[TMP0:%.*]] = landingpad { ptr, i32 }
+; CHECK-NEXT: catch ptr null
; CHECK-NEXT: br label [[LPADBBSUCC1:%.*]]
; CHECK: lpadBBSucc1:
; CHECK-NEXT: ret void
@@ -967,8 +964,8 @@ while.body2:
to label %while.cond unwind label %lpadBB
lpadBB:
%.lcssa1 = phi i32 [ 0, %while.body ], [ %mul, %while.body2 ]
- landingpad { i8*, i32 }
- catch i8* null
+ landingpad { ptr, i32 }
+ catch ptr null
br label %lpadBBSucc1
lpadBBSucc1:
@@ -978,12 +975,12 @@ try.cont:
ret void
}
-define i32 @not_willreturn(i8* %p) {
+define i32 @not_willreturn(ptr %p) {
; CHECK-LABEL: @not_willreturn(
; CHECK-NEXT: [[X:%.*]] = call i32 @getv() #[[ATTR5:[0-9]+]]
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
-; CHECK-NEXT: store volatile i8 0, i8* [[P:%.*]], align 1
+; CHECK-NEXT: store volatile i8 0, ptr [[P:%.*]], align 1
; CHECK-NEXT: br i1 true, label [[LOOP]], label [[OUT:%.*]]
; CHECK: out:
; CHECK-NEXT: [[X_LCSSA:%.*]] = phi i32 [ [[X]], [[LOOP]] ]
@@ -993,7 +990,7 @@ define i32 @not_willreturn(i8* %p) {
loop:
%x = call i32 @getv() nounwind readnone
- store volatile i8 0, i8* %p
+ store volatile i8 0, ptr %p
br i1 true, label %loop, label %out
out:
@@ -1005,5 +1002,5 @@ declare void @may_throw2()
declare i32 @__CxxFrameHandler3(...)
declare i32 @getv()
declare i1 @getc()
-declare void @f(i32*)
+declare void @f(ptr)
declare void @g()
diff --git a/llvm/test/Transforms/LICM/speculate.ll b/llvm/test/Transforms/LICM/speculate.ll
index dc6059cfe8ae5..7b669cf339ebe 100644
--- a/llvm/test/Transforms/LICM/speculate.ll
+++ b/llvm/test/Transforms/LICM/speculate.ll
@@ -7,21 +7,21 @@
; CHECK: %div = udiv i64 %x, 2
; CHECK-NEXT: br label %for.body
-define void @safe_udiv(i64 %x, i64 %m, i64 %n, i32* %p, i64* %q) nounwind {
+define void @safe_udiv(i64 %x, i64 %m, i64 %n, ptr %p, ptr %q) nounwind {
entry:
br label %for.body
for.body: ; preds = %entry, %for.inc
%i.02 = phi i64 [ %inc, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %p, i64 %i.02
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %p, i64 %i.02
+ %0 = load i32, ptr %arrayidx, align 4
%tobool = icmp eq i32 %0, 0
br i1 %tobool, label %for.inc, label %if.then
if.then: ; preds = %for.body
%div = udiv i64 %x, 2
- %arrayidx1 = getelementptr inbounds i64, i64* %q, i64 %i.02
- store i64 %div, i64* %arrayidx1, align 8
+ %arrayidx1 = getelementptr inbounds i64, ptr %q, i64 %i.02
+ store i64 %div, ptr %arrayidx1, align 8
br label %for.inc
for.inc: ; preds = %if.then, %for.body
@@ -39,21 +39,21 @@ for.end: ; preds = %for.inc, %entry
; CHECK-NOT: udiv
; CHECK: for.body:
-define void @unsafe_udiv(i64 %x, i64 %m, i64 %n, i32* %p, i64* %q) nounwind {
+define void @unsafe_udiv(i64 %x, i64 %m, i64 %n, ptr %p, ptr %q) nounwind {
entry:
br label %for.body
for.body: ; preds = %entry, %for.inc
%i.02 = phi i64 [ %inc, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %p, i64 %i.02
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %p, i64 %i.02
+ %0 = load i32, ptr %arrayidx, align 4
%tobool = icmp eq i32 %0, 0
br i1 %tobool, label %for.inc, label %if.then
if.then: ; preds = %for.body
%div = udiv i64 %x, %m
- %arrayidx1 = getelementptr inbounds i64, i64* %q, i64 %i.02
- store i64 %div, i64* %arrayidx1, align 8
+ %arrayidx1 = getelementptr inbounds i64, ptr %q, i64 %i.02
+ store i64 %div, ptr %arrayidx1, align 8
br label %for.inc
for.inc: ; preds = %if.then, %for.body
@@ -72,22 +72,22 @@ for.end: ; preds = %for.inc, %entry
; CHECK: %div = sdiv i64 %x, 2
; CHECK-NEXT: br label %for.body
-define void @safe_sdiv(i64 %x, i64 %m, i64 %n, i32* %p, i64* %q) nounwind {
+define void @safe_sdiv(i64 %x, i64 %m, i64 %n, ptr %p, ptr %q) nounwind {
entry:
%and = and i64 %m, -3
br label %for.body
for.body: ; preds = %entry, %for.inc
%i.02 = phi i64 [ %inc, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %p, i64 %i.02
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %p, i64 %i.02
+ %0 = load i32, ptr %arrayidx, align 4
%tobool = icmp eq i32 %0, 0
br i1 %tobool, label %for.inc, label %if.then
if.then: ; preds = %for.body
%div = sdiv i64 %x, 2
- %arrayidx1 = getelementptr inbounds i64, i64* %q, i64 %i.02
- store i64 %div, i64* %arrayidx1, align 8
+ %arrayidx1 = getelementptr inbounds i64, ptr %q, i64 %i.02
+ store i64 %div, ptr %arrayidx1, align 8
br label %for.inc
for.inc: ; preds = %if.then, %for.body
@@ -105,22 +105,22 @@ for.end: ; preds = %for.inc, %entry
; CHECK-NOT: sdiv
; CHECK: for.body:
-define void @unsafe_sdiv_a(i64 %x, i64 %m, i64 %n, i32* %p, i64* %q) nounwind {
+define void @unsafe_sdiv_a(i64 %x, i64 %m, i64 %n, ptr %p, ptr %q) nounwind {
entry:
%or = or i64 %m, 1
br label %for.body
for.body: ; preds = %entry, %for.inc
%i.02 = phi i64 [ %inc, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %p, i64 %i.02
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %p, i64 %i.02
+ %0 = load i32, ptr %arrayidx, align 4
%tobool = icmp eq i32 %0, 0
br i1 %tobool, label %for.inc, label %if.then
if.then: ; preds = %for.body
%div = sdiv i64 %x, %or
- %arrayidx1 = getelementptr inbounds i64, i64* %q, i64 %i.02
- store i64 %div, i64* %arrayidx1, align 8
+ %arrayidx1 = getelementptr inbounds i64, ptr %q, i64 %i.02
+ store i64 %div, ptr %arrayidx1, align 8
br label %for.inc
for.inc: ; preds = %if.then, %for.body
@@ -138,22 +138,22 @@ for.end: ; preds = %for.inc, %entry
; CHECK-NOT: sdiv
; CHECK: for.body:
-define void @unsafe_sdiv_b(i64 %x, i64 %m, i64 %n, i32* %p, i64* %q) nounwind {
+define void @unsafe_sdiv_b(i64 %x, i64 %m, i64 %n, ptr %p, ptr %q) nounwind {
entry:
%and = and i64 %m, -3
br label %for.body
for.body: ; preds = %entry, %for.inc
%i.02 = phi i64 [ %inc, %for.inc ], [ 0, %entry ]
- %arrayidx = getelementptr inbounds i32, i32* %p, i64 %i.02
- %0 = load i32, i32* %arrayidx, align 4
+ %arrayidx = getelementptr inbounds i32, ptr %p, i64 %i.02
+ %0 = load i32, ptr %arrayidx, align 4
%tobool = icmp eq i32 %0, 0
br i1 %tobool, label %for.inc, label %if.then
if.then: ; preds = %for.body
%div = sdiv i64 %x, %and
- %arrayidx1 = getelementptr inbounds i64, i64* %q, i64 %i.02
- store i64 %div, i64* %arrayidx1, align 8
+ %arrayidx1 = getelementptr inbounds i64, ptr %q, i64 %i.02
+ store i64 %div, ptr %arrayidx1, align 8
br label %for.inc
for.inc: ; preds = %if.then, %for.body
@@ -167,7 +167,7 @@ for.end: ; preds = %for.inc, %entry
; SDiv is unsafe to speculate inside an infinite loop.
-define void @unsafe_sdiv_c(i64 %a, i64 %b, i64* %p) {
+define void @unsafe_sdiv_c(i64 %a, i64 %b, ptr %p) {
entry:
; CHECK: entry:
; CHECK-NOT: sdiv
@@ -180,7 +180,7 @@ for.body:
if.then:
%d = sdiv i64 %a, %b
- store i64 %d, i64* %p
+ store i64 %d, ptr %p
br label %backedge
backedge:
diff --git a/llvm/test/Transforms/LICM/store-hoisting.ll b/llvm/test/Transforms/LICM/store-hoisting.ll
index f6cf6e12350b6..3b36f299eaef5 100644
--- a/llvm/test/Transforms/LICM/store-hoisting.ll
+++ b/llvm/test/Transforms/LICM/store-hoisting.ll
@@ -1,16 +1,16 @@
; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' < %s -S | FileCheck %s
-define void @test(i32* %loc) {
+define void @test(ptr %loc) {
; CHECK-LABEL: @test
; CHECK-LABEL: entry:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: loop:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -19,17 +19,17 @@ exit:
ret void
}
-define void @test_multiexit(i32* %loc, i1 %earlycnd) {
+define void @test_multiexit(ptr %loc, i1 %earlycnd) {
; CHECK-LABEL: @test_multiexit
; CHECK-LABEL: entry:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: loop:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %backedge]
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
%iv.next = add i32 %iv, 1
br i1 %earlycnd, label %exit1, label %backedge
@@ -43,35 +43,35 @@ exit2:
ret void
}
-define i32* @false_negative_2use(i32* %loc) {
+define ptr @false_negative_2use(ptr %loc) {
; CHECK-LABEL: @false_negative_2use
; CHECK-LABEL: entry:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: loop:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
exit:
- ret i32* %loc
+ ret ptr %loc
}
-define void @neg_lv_value(i32* %loc) {
+define void @neg_lv_value(ptr %loc) {
; CHECK-LABEL: @neg_lv_value
; CHECK-LABEL: exit:
-; CHECK: store i32 %iv.lcssa, i32* %loc
+; CHECK: store i32 %iv.lcssa, ptr %loc
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 %iv, i32* %loc
+ store i32 %iv, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -80,18 +80,18 @@ exit:
ret void
}
-define void @neg_lv_addr(i32* %loc) {
+define void @neg_lv_addr(ptr %loc) {
; CHECK-LABEL: @neg_lv_addr
; CHECK-LABEL: loop:
-; CHECK: store i32 0, i32* %p
+; CHECK: store i32 0, ptr %p
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- %p = getelementptr i32, i32* %loc, i32 %iv
- store i32 0, i32* %p
+ %p = getelementptr i32, ptr %loc, i32 %iv
+ store i32 0, ptr %p
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -100,17 +100,17 @@ exit:
ret void
}
-define void @neg_mod(i32* %loc) {
+define void @neg_mod(ptr %loc) {
; CHECK-LABEL: @neg_mod
; CHECK-LABEL: exit:
-; CHECK: store i32 %iv.lcssa, i32* %loc
+; CHECK: store i32 %iv.lcssa, ptr %loc
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
- store i32 %iv, i32* %loc
+ store i32 0, ptr %loc
+ store i32 %iv, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -120,19 +120,19 @@ exit:
}
; Hoisting the store is actually valid here, as it dominates the load.
-define void @neg_ref(i32* %loc) {
+define void @neg_ref(ptr %loc) {
; CHECK-LABEL: @neg_ref
; CHECK-LABEL: exit1:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit2:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %backedge]
- store i32 0, i32* %loc
- %v = load i32, i32* %loc
+ store i32 0, ptr %loc
+ %v = load i32, ptr %loc
%earlycnd = icmp eq i32 %v, 198
br i1 %earlycnd, label %exit1, label %backedge
@@ -148,20 +148,20 @@ exit2:
}
; Hoisting the store here leads to a miscompile.
-define void @neg_ref2(i32* %loc) {
+define void @neg_ref2(ptr %loc) {
; CHECK-LABEL: @neg_ref2
; CHECK-LABEL: exit1:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit2:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
entry:
- store i32 198, i32* %loc
+ store i32 198, ptr %loc
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %backedge]
- %v = load i32, i32* %loc
- store i32 0, i32* %loc
+ %v = load i32, ptr %loc
+ store i32 0, ptr %loc
%earlycnd = icmp eq i32 %v, 198
br i1 %earlycnd, label %exit1, label %backedge
@@ -178,17 +178,17 @@ exit2:
declare void @modref()
-define void @neg_modref(i32* %loc) {
+define void @neg_modref(ptr %loc) {
; CHECK-LABEL: @neg_modref
; CHECK-LABEL: loop:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
call void @modref()
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
@@ -198,17 +198,17 @@ exit:
ret void
}
-define void @neg_fence(i32* %loc) {
+define void @neg_fence(ptr %loc) {
; CHECK-LABEL: @neg_fence
; CHECK-LABEL: loop:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
fence seq_cst
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
@@ -218,17 +218,17 @@ exit:
ret void
}
-define void @neg_volatile(i32* %loc) {
+define void @neg_volatile(ptr %loc) {
; CHECK-LABEL: @neg_volatile
; CHECK-LABEL: loop:
-; CHECK: store volatile i32 0, i32* %loc
+; CHECK: store volatile i32 0, ptr %loc
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store volatile i32 0, i32* %loc
+ store volatile i32 0, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -237,17 +237,17 @@ exit:
ret void
}
-define void @neg_release(i32* %loc) {
+define void @neg_release(ptr %loc) {
; CHECK-LABEL: @neg_release
; CHECK-LABEL: loop:
-; CHECK: store atomic i32 0, i32* %loc release, align 4
+; CHECK: store atomic i32 0, ptr %loc release, align 4
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store atomic i32 0, i32* %loc release, align 4
+ store atomic i32 0, ptr %loc release, align 4
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -256,17 +256,17 @@ exit:
ret void
}
-define void @neg_seq_cst(i32* %loc) {
+define void @neg_seq_cst(ptr %loc) {
; CHECK-LABEL: @neg_seq_cst
; CHECK-LABEL: loop:
-; CHECK: store atomic i32 0, i32* %loc seq_cst, align 4
+; CHECK: store atomic i32 0, ptr %loc seq_cst, align 4
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store atomic i32 0, i32* %loc seq_cst, align 4
+ store atomic i32 0, ptr %loc seq_cst, align 4
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -277,21 +277,21 @@ exit:
declare void @maythrow() inaccessiblememonly
-define void @neg_early_exit(i32* %loc) {
+define void @neg_early_exit(ptr %loc) {
; CHECK-LABEL: @neg_early_exit
; CHECK-LABEL: body:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %body]
- %is_null = icmp eq i32* %loc, null
+ %is_null = icmp eq ptr %loc, null
br i1 %is_null, label %exit, label %body
body:
call void @maythrow()
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -300,10 +300,10 @@ exit:
ret void
}
-define void @neg_early_throw(i32* %loc) {
+define void @neg_early_throw(ptr %loc) {
; CHECK-LABEL: @neg_early_throw
; CHECK-LABEL: loop:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit:
entry:
br label %loop
@@ -311,7 +311,7 @@ entry:
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
call void @maythrow()
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -320,17 +320,17 @@ exit:
ret void
}
-define void @test_late_throw(i32* %loc) {
+define void @test_late_throw(ptr %loc) {
; CHECK-LABEL: @test_late_throw
; CHECK-LABEL: entry:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: loop:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
call void @maythrow()
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
@@ -342,18 +342,18 @@ exit:
; TODO: could validly hoist the store here since we know what value
; the load must observe.
-define i32 @test_dominated_read(i32* %loc) {
+define i32 @test_dominated_read(ptr %loc) {
; CHECK-LABEL: @test_dominated_read
; CHECK-LABEL: entry:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: loop:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
- %reload = load i32, i32* %loc
+ store i32 0, ptr %loc
+ %reload = load i32, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -364,17 +364,17 @@ exit:
; TODO: could validly hoist the store since we already hoisted the load and
; it's no longer in the loop.
-define i32 @test_dominating_read(i32* %loc) {
+define i32 @test_dominating_read(ptr %loc) {
; CHECK-LABEL: @test_dominating_read
; CHECK-LABEL: exit:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- %reload = load i32, i32* %loc
- store i32 0, i32* %loc
+ %reload = load i32, ptr %loc
+ store i32 0, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -386,17 +386,17 @@ exit:
declare void @readonly() readonly
; TODO: can legally hoist since value read by call is known
-define void @test_dominated_readonly(i32* %loc) {
+define void @test_dominated_readonly(ptr %loc) {
; CHECK-LABEL: @test_dominated_readonly
; CHECK-LABEL: loop:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
call void @readonly()
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
@@ -409,19 +409,19 @@ exit:
; While technically possible to hoist the store to %loc, this runs across
; a funemental limitation of alias sets since both stores and the call are
; within the same alias set and we can't distinguish them cheaply.
-define void @test_aliasset_fn(i32* %loc, i32* %loc2) {
+define void @test_aliasset_fn(ptr %loc, ptr %loc2) {
; CHECK-LABEL: @test_aliasset_fn
; CHECK-LABEL: loop:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit:
entry:
br label %loop
loop:
%iv = phi i32 [0, %entry], [%iv.next, %loop]
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
call void @readonly()
- store i32 %iv, i32* %loc2
+ store i32 %iv, ptr %loc2
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
@@ -433,10 +433,10 @@ exit:
; If we can't tell if the value is read before the write, we can't hoist the
; write over the potential read (since we don't know the value read)
-define void @neg_may_read(i32* %loc, i1 %maybe) {
+define void @neg_may_read(ptr %loc, i1 %maybe) {
; CHECK-LABEL: @neg_may_read
; CHECK-LABEL: loop:
-; CHECK: store i32 0, i32* %loc
+; CHECK: store i32 0, ptr %loc
; CHECK-LABEL: exit:
entry:
br label %loop
@@ -449,7 +449,7 @@ taken:
call void @readonly()
br label %merge
merge:
- store i32 0, i32* %loc
+ store i32 0, ptr %loc
%iv.next = add i32 %iv, 1
%cmp = icmp slt i32 %iv, 200
br i1 %cmp, label %loop, label %exit
diff --git a/llvm/test/Transforms/LICM/strlen.ll b/llvm/test/Transforms/LICM/strlen.ll
index d14a082d3c492..fd709f650d4e4 100644
--- a/llvm/test/Transforms/LICM/strlen.ll
+++ b/llvm/test/Transforms/LICM/strlen.ll
@@ -1,19 +1,19 @@
; RUN: opt -S -inferattrs -basic-aa -licm < %s | FileCheck %s
-define void @test(i64* noalias %loc, i8* noalias %a) {
+define void @test(ptr noalias %loc, ptr noalias %a) {
; CHECK-LABEL: @test
; CHECK: @strlen
; CHECK-LABEL: loop:
br label %loop
loop:
- %res = call i64 @strlen(i8* %a)
- store i64 %res, i64* %loc
+ %res = call i64 @strlen(ptr %a)
+ store i64 %res, ptr %loc
br label %loop
}
-; CHECK: declare i64 @strlen(i8* nocapture) #0
+; CHECK: declare i64 @strlen(ptr nocapture) #0
; CHECK: attributes #0 = { argmemonly mustprogress nofree nounwind readonly willreturn }
-declare i64 @strlen(i8*)
+declare i64 @strlen(ptr)
diff --git a/llvm/test/Transforms/LICM/unrolled-deeply-nested.ll b/llvm/test/Transforms/LICM/unrolled-deeply-nested.ll
index 87a0104c6c452..ad6f18059a59b 100644
--- a/llvm/test/Transforms/LICM/unrolled-deeply-nested.ll
+++ b/llvm/test/Transforms/LICM/unrolled-deeply-nested.ll
@@ -6,20 +6,14 @@
; RUN: opt -S -aa-pipeline=basic-aa -passes='require<opt-remark-emit>,loop-mssa(licm)' < %s | FileCheck %s
; RUN: opt -S -basic-aa -licm < %s | FileCheck %s
-define i32 @test(i32* %a, i64 %n.0, i64 %n.0.0, i64 %n.0.0.0, i64 %n.0.0.0.0) nounwind uwtable readonly {
+define i32 @test(ptr %a, i64 %n.0, i64 %n.0.0, i64 %n.0.0.0, i64 %n.0.0.0.0) nounwind uwtable readonly {
; CHECK-LABEL: define i32 @test
entry:
%b = alloca i32
%c = alloca i32
- %a.i8 = bitcast i32* %a to i8*
- %b.i8 = bitcast i32* %b to i8*
- %c.i8 = bitcast i32* %c to i8*
br label %l.0.header
; CHECK: %b = alloca i32
; CHECK: %c = alloca i32
-; CHECK: %[[AI8:.*]] = bitcast i32* %a to i8*
-; CHECK: %[[BI8:.*]] = bitcast i32* %b to i8*
-; CHECK: %[[CI8:.*]] = bitcast i32* %c to i8*
; CHECK-NOT: load
; CHECK: br
@@ -27,15 +21,15 @@ l.0.header:
%iv.0 = phi i64 [ %iv.0.next, %l.0.latch ], [ 0, %entry ]
%iv.0.next = add i64 %iv.0, 1
%exitcond.0 = icmp eq i64 %iv.0.next, %n.0
- %a.val = load i32, i32* %a
- store i32 %a.val, i32* %b
+ %a.val = load i32, ptr %a
+ store i32 %a.val, ptr %b
%c.val = trunc i64 %iv.0 to i32
- store i32 %c.val, i32* %c
+ store i32 %c.val, ptr %c
br label %l.0.0.header
-; CHECK: %[[AV:.*]] = load i32, i32* %a
-; CHECK: store i32 %[[AV]], i32* %b
+; CHECK: %[[AV:.*]] = load i32, ptr %a
+; CHECK: store i32 %[[AV]], ptr %b
; CHECK: %[[CT:.*]] = trunc i64 {{.*}} to i32
-; CHECK: store i32 %[[CT]], i32* %c
+; CHECK: store i32 %[[CT]], ptr %c
; CHECK: br
l.0.0.header:
@@ -49,11 +43,11 @@ l.0.0.0.header:
%iv.0.0.0 = phi i64 [ %iv.0.0.0.next, %l.0.0.0.header ], [ 0, %l.0.0.header ]
%iv.0.0.0.next = add i64 %iv.0.0.0, 1
%exitcond.0.0.0 = icmp eq i64 %iv.0.0.0.next, %n.0.0.0
- call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a.i8, i8* %c.i8, i64 4, i1 false)
- call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b.i8, i8* %c.i8, i64 4, i1 false)
+ call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %c, i64 4, i1 false)
+ call void @llvm.memcpy.p0.p0.i64(ptr %b, ptr %c, i64 4, i1 false)
br i1 %exitcond.0.0.0, label %l.0.0.0.header, label %l.0.0.latch
-; CHECK: call void @llvm.memcpy.{{.*}}(i8* %[[AI8]], i8* %[[CI8]], i64 4
-; CHECK: call void @llvm.memcpy.{{.*}}(i8* %[[BI8]], i8* %[[CI8]], i64 4
+; CHECK: call void @llvm.memcpy.{{.*}}(ptr %a, ptr %c, i64 4
+; CHECK: call void @llvm.memcpy.{{.*}}(ptr %b, ptr %c, i64 4
; CHECK: br
l.0.0.latch:
@@ -61,9 +55,9 @@ l.0.0.latch:
; CHECK: br
l.0.latch:
- %b.val = load i32, i32* %b
+ %b.val = load i32, ptr %b
br i1 %exitcond.0, label %exit, label %l.0.header
-; CHECK: %[[BV:.*]] = load i32, i32* %b
+; CHECK: %[[BV:.*]] = load i32, ptr %b
; CHECK: br
exit:
@@ -73,4 +67,4 @@ exit:
; CHECK: ret i32 %[[LCSSA]]
}
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1)
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1)
diff --git a/llvm/test/Transforms/LICM/update-scev.ll b/llvm/test/Transforms/LICM/update-scev.ll
index d9ee51cd0b5e6..d4e41a39b9c30 100644
--- a/llvm/test/Transforms/LICM/update-scev.ll
+++ b/llvm/test/Transforms/LICM/update-scev.ll
@@ -3,16 +3,16 @@
declare void @clobber()
-define void @f_0(i1* %loc) {
+define void @f_0(ptr %loc) {
; IR-AFTER-TRANSFORM-LABEL: @f_0(
; IR-AFTER-TRANSFORM: loop.outer:
; IR-AFTER-TRANSFORM-NEXT: call void @clobber()
-; IR-AFTER-TRANSFORM-NEXT: %cond = load i1, i1* %loc
+; IR-AFTER-TRANSFORM-NEXT: %cond = load i1, ptr %loc
; IR-AFTER-TRANSFORM-NEXT: br label %loop.inner
; SCEV-EXPRS: Classifying expressions for: @f_0
; SCEV-EXPRS: Classifying expressions for: @f_0
-; SCEV-EXPRS: %cond = load i1, i1* %loc
+; SCEV-EXPRS: %cond = load i1, ptr %loc
; SCEV-EXPRS-NEXT: --> {{.*}} LoopDispositions: { %loop.outer: Variant, %loop.inner: Invariant }
entry:
@@ -23,7 +23,7 @@ loop.outer:
br label %loop.inner
loop.inner:
- %cond = load i1, i1* %loc
+ %cond = load i1, ptr %loc
br i1 %cond, label %loop.inner, label %leave.inner
leave.inner:
diff --git a/llvm/test/Transforms/LICM/volatile-alias.ll b/llvm/test/Transforms/LICM/volatile-alias.ll
index 9d12f7fd9638f..94bf4780d89c3 100644
--- a/llvm/test/Transforms/LICM/volatile-alias.ll
+++ b/llvm/test/Transforms/LICM/volatile-alias.ll
@@ -3,52 +3,52 @@
; The objects *p and *q are aliased to each other, but even though *q is
; volatile, *p can be considered invariant in the loop. Check if it is moved
; out of the loop.
-; CHECK: load i32, i32* %p
+; CHECK: load i32, ptr %p
; CHECK: for.body:
-; CHECK: load volatile i32, i32* %q
+; CHECK: load volatile i32, ptr %q
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
; Function Attrs: nounwind uwtable
-define i32 @foo(i32* dereferenceable(4) nonnull %p, i32* %q, i32 %n) #0 {
+define i32 @foo(ptr dereferenceable(4) nonnull %p, ptr %q, i32 %n) #0 {
entry:
- %p.addr = alloca i32*, align 8
- %q.addr = alloca i32*, align 8
+ %p.addr = alloca ptr, align 8
+ %q.addr = alloca ptr, align 8
%n.addr = alloca i32, align 4
%i = alloca i32, align 4
%s = alloca i32, align 4
- store i32* %p, i32** %p.addr, align 8
- store i32* %q, i32** %q.addr, align 8
- store i32 %n, i32* %n.addr, align 4
- store i32 0, i32* %s, align 4
- store i32 0, i32* %i, align 4
+ store ptr %p, ptr %p.addr, align 8
+ store ptr %q, ptr %q.addr, align 8
+ store i32 %n, ptr %n.addr, align 4
+ store i32 0, ptr %s, align 4
+ store i32 0, ptr %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %entry
- %0 = load i32, i32* %i, align 4
- %1 = load i32, i32* %n.addr, align 4
+ %0 = load i32, ptr %i, align 4
+ %1 = load i32, ptr %n.addr, align 4
%cmp = icmp slt i32 %0, %1
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
- %2 = load i32*, i32** %p.addr, align 8
- %3 = load i32, i32* %2, align 4
- %4 = load i32*, i32** %q.addr, align 8
- %5 = load volatile i32, i32* %4, align 4
+ %2 = load ptr, ptr %p.addr, align 8
+ %3 = load i32, ptr %2, align 4
+ %4 = load ptr, ptr %q.addr, align 8
+ %5 = load volatile i32, ptr %4, align 4
%add = add nsw i32 %3, %5
- %6 = load i32, i32* %s, align 4
+ %6 = load i32, ptr %s, align 4
%add1 = add nsw i32 %6, %add
- store i32 %add1, i32* %s, align 4
+ store i32 %add1, ptr %s, align 4
br label %for.inc
for.inc: ; preds = %for.body
- %7 = load i32, i32* %i, align 4
+ %7 = load i32, ptr %i, align 4
%inc = add nsw i32 %7, 1
- store i32 %inc, i32* %i, align 4
+ store i32 %inc, ptr %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
- %8 = load i32, i32* %s, align 4
+ %8 = load i32, ptr %s, align 4
ret i32 %8
}
More information about the llvm-commits
mailing list