Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,11 @@ define i32 @wrong_bb_order() {
; CHECK-NOT: < bb43 bb49 bb59 bb3 bb31 bb41 > [ 77, bb43 ]
bb:
%i = alloca [420 x i8], align 1
%i2 = getelementptr inbounds [420 x i8], [420 x i8]* %i, i64 0, i64 390
%i2 = getelementptr inbounds [420 x i8], ptr %i, i64 0, i64 390
br label %bb3

bb3: ; preds = %bb59, %bb
%i4 = phi i8* [ %i2, %bb ], [ %i60, %bb59 ]
%i4 = phi ptr [ %i2, %bb ], [ %i60, %bb59 ]
%i5 = phi i8 [ 77, %bb ], [ %i64, %bb59 ]
%i6 = phi i32 [ 2, %bb ], [ %i63, %bb59 ]
%i7 = phi i32 [ 26, %bb ], [ %i62, %bb59 ]
Expand All @@ -137,16 +137,16 @@ bb3: ; preds = %bb59, %bb
%i13 = mul nsw i32 %i12, 3
%i14 = add nsw i32 %i13, %i6
%i15 = sext i32 %i14 to i64
%i16 = getelementptr inbounds i8, i8* %i4, i64 %i15
%i17 = load i8, i8* %i16, align 1
%i16 = getelementptr inbounds i8, ptr %i4, i64 %i15
%i17 = load i8, ptr %i16, align 1
%i18 = icmp sgt i8 %i17, 0
br i1 %i18, label %bb21, label %bb31

bb21: ; preds = %bb3
br i1 true, label %bb59, label %bb43

bb59: ; preds = %bb49, %bb43, %bb31, %bb21
%i60 = phi i8* [ %i44, %bb49 ], [ %i44, %bb43 ], [ %i34, %bb31 ], [ %i4, %bb21 ]
%i60 = phi ptr [ %i44, %bb49 ], [ %i44, %bb43 ], [ %i34, %bb31 ], [ %i4, %bb21 ]
%i61 = phi i32 [ %i45, %bb49 ], [ %i45, %bb43 ], [ %i33, %bb31 ], [ %i8, %bb21 ]
%i62 = phi i32 [ %i47, %bb49 ], [ %i47, %bb43 ], [ %i32, %bb31 ], [ %i7, %bb21 ]
%i63 = phi i32 [ %i48, %bb49 ], [ %i48, %bb43 ], [ 2, %bb31 ], [ %i6, %bb21 ]
Expand All @@ -157,7 +157,7 @@ bb59: ; preds = %bb49, %bb43, %bb31,
bb31: ; preds = %bb3
%i32 = add nsw i32 %i7, -1
%i33 = add nsw i32 %i8, -1
%i34 = getelementptr inbounds i8, i8* %i4, i64 -15
%i34 = getelementptr inbounds i8, ptr %i4, i64 -15
%i35 = icmp eq i8 %i5, 77
br i1 %i35, label %bb59, label %bb41

Expand All @@ -166,7 +166,7 @@ bb41: ; preds = %bb31
br label %bb43

bb43: ; preds = %bb41, %bb21
%i44 = phi i8* [ %i34, %bb41 ], [ %i4, %bb21 ]
%i44 = phi ptr [ %i34, %bb41 ], [ %i4, %bb21 ]
%i45 = phi i32 [ %i33, %bb41 ], [ %i8, %bb21 ]
%i46 = phi i8 [ 77, %bb41 ], [ %i5, %bb21 ]
%i47 = phi i32 [ %i32, %bb41 ], [ %i7, %bb21 ]
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/DeadArgElim/2006-06-27-struct-ret.ll
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
; RUN: opt < %s -passes=deadargelim -disable-output

define internal void @build_delaunay({ i32 }* sret({ i32 }) %agg.result) {
define internal void @build_delaunay(ptr sret({ i32 }) %agg.result) {
ret void
}

define void @test() {
call void @build_delaunay({ i32 }* sret({ i32 }) null)
call void @build_delaunay(ptr sret({ i32 }) null)
ret void
}

6 changes: 3 additions & 3 deletions llvm/test/Transforms/DeadArgElim/2007-12-20-ParamAttrs.ll
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@

; CHECK: define internal void @foo(i8 signext %y) [[NUW:#[0-9]+]]

define internal zeroext i8 @foo(i8* inreg %p, i8 signext %y, ... ) nounwind {
store i8 %y, i8* @g
define internal zeroext i8 @foo(ptr inreg %p, i8 signext %y, ... ) nounwind {
store i8 %y, ptr @g
ret i8 0
}

define i32 @bar() {
; CHECK: call void @foo(i8 signext 1) [[NUW]]
%A = call zeroext i8(i8*, i8, ...) @foo(i8* inreg null, i8 signext 1, %struct* byval(%struct) null ) nounwind
%A = call zeroext i8(ptr, i8, ...) @foo(ptr inreg null, i8 signext 1, ptr byval(%struct) null ) nounwind
ret i32 0
}

Expand Down
20 changes: 9 additions & 11 deletions llvm/test/Transforms/DeadArgElim/2008-01-16-VarargsParamAttrs.ll
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
; RUN: opt < %s -passes=deadargelim -S | grep byval

%struct.point = type { double, double }
@pts = global [4 x %struct.point] [ %struct.point { double 1.000000e+00, double 2.000000e+00 }, %struct.point { double 3.000000e+00, double 4.000000e+00 }, %struct.point { double 5.000000e+00, double 6.000000e+00 }, %struct.point { double 7.000000e+00, double 8.000000e+00 } ], align 32 ; <[4 x %struct.point]*> [#uses=1]
@pts = global [4 x %struct.point] [ %struct.point { double 1.000000e+00, double 2.000000e+00 }, %struct.point { double 3.000000e+00, double 4.000000e+00 }, %struct.point { double 5.000000e+00, double 6.000000e+00 }, %struct.point { double 7.000000e+00, double 8.000000e+00 } ], align 32 ; <ptr> [#uses=1]

define internal i32 @va1(i32 %nargs, ...) {
entry:
%pi = alloca %struct.point ; <%struct.point*> [#uses=0]
%args = alloca i8* ; <i8**> [#uses=2]
%pi = alloca %struct.point ; <ptr> [#uses=0]
%args = alloca ptr ; <ptr> [#uses=2]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
%args1 = bitcast i8** %args to i8* ; <i8*> [#uses=1]
call void @llvm.va_start( i8* %args1 )
%args41 = bitcast i8** %args to i8* ; <i8*> [#uses=1]
call void @llvm.va_end( i8* %args41 )
call void @llvm.va_start( ptr %args )
call void @llvm.va_end( ptr %args )
ret i32 undef
}

declare void @llvm.va_start(i8*) nounwind
declare void @llvm.va_start(ptr) nounwind

declare void @llvm.va_end(i8*) nounwind
declare void @llvm.va_end(ptr) nounwind

define i32 @main() {
entry:
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
%tmp = getelementptr [4 x %struct.point], [4 x %struct.point]* @pts, i32 0, i32 0 ; <%struct.point*> [#uses=1]
%tmp1 = call i32 (i32, ...) @va1(i32 1, %struct.point* byval(%struct.point) %tmp) nounwind ; <i32> [#uses=0]
%tmp = getelementptr [4 x %struct.point], ptr @pts, i32 0, i32 0 ; <ptr> [#uses=1]
%tmp1 = call i32 (i32, ...) @va1(i32 1, ptr byval(%struct.point) %tmp) nounwind ; <i32> [#uses=0]
call void @exit( i32 0 ) noreturn nounwind
unreachable
}
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,26 @@ define internal { i32, i32 } @foo() {
ret {i32,i32} {i32 42, i32 4}
}

define i32 @bar() personality i32 (...)* @__gxx_personality_v0 {
define i32 @bar() personality ptr @__gxx_personality_v0 {
%x = invoke {i32,i32} @foo() to label %T unwind label %T2
T:
%y = extractvalue {i32,i32} %x, 1
ret i32 %y
T2:
%exn = landingpad {i8*, i32}
%exn = landingpad {ptr, i32}
cleanup
unreachable
}

define i32 @bar2() personality i32 (...)* @__gxx_personality_v0 {
define i32 @bar2() personality ptr @__gxx_personality_v0 {
entry:
%x = invoke {i32,i32} @foo() to label %T unwind label %T2
T:
%PN = phi i32 [0, %entry]
%y = extractvalue {i32,i32} %x, 1
ret i32 %y
T2:
%exn = landingpad {i8*, i32}
%exn = landingpad {ptr, i32}
cleanup
unreachable
}
Expand Down
20 changes: 10 additions & 10 deletions llvm/test/Transforms/DeadArgElim/2010-04-30-DbgInfo.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,26 @@
; Apart from checking if debug metadata is correctly propagated, this also tests whether DW_CC_nocall
; calling convention is added when either return values or arguments are removed.

@.str = private constant [1 x i8] zeroinitializer, align 1 ; <[1 x i8]*> [#uses=1]
@.str = private constant [1 x i8] zeroinitializer, align 1 ; <ptr> [#uses=1]

define i8* @vfs_addname(i8* %name, i32 %len, i32 %hash, i32 %flags) nounwind ssp !dbg !1 {
define ptr @vfs_addname(ptr %name, i32 %len, i32 %hash, i32 %flags) nounwind ssp !dbg !1 {
;
entry:
call void @llvm.dbg.value(metadata i8* %name, metadata !0, metadata !DIExpression()), !dbg !DILocation(scope: !1)
call void @llvm.dbg.value(metadata ptr %name, metadata !0, metadata !DIExpression()), !dbg !DILocation(scope: !1)
call void @llvm.dbg.value(metadata i32 %len, metadata !10, metadata !DIExpression()), !dbg !DILocation(scope: !1)
call void @llvm.dbg.value(metadata i32 %hash, metadata !11, metadata !DIExpression()), !dbg !DILocation(scope: !1)
call void @llvm.dbg.value(metadata i32 %flags, metadata !12, metadata !DIExpression()), !dbg !DILocation(scope: !1)
; CHECK: call fastcc i8* @add_name_internal(i8* %name, i32 %hash) [[NUW:#[0-9]+]], !dbg !{{[0-9]+}}
%0 = call fastcc i8* @add_name_internal(i8* %name, i32 %len, i32 %hash, i8 zeroext 0, i32 %flags) nounwind, !dbg !13 ; <i8*> [#uses=1]
ret i8* %0, !dbg !13
; CHECK: call fastcc ptr @add_name_internal(ptr %name, i32 %hash) [[NUW:#[0-9]+]], !dbg !{{[0-9]+}}
%0 = call fastcc ptr @add_name_internal(ptr %name, i32 %len, i32 %hash, i8 zeroext 0, i32 %flags) nounwind, !dbg !13 ; <ptr> [#uses=1]
ret ptr %0, !dbg !13
}

declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone

define internal fastcc i8* @add_name_internal(i8* %name, i32 %len, i32 %hash, i8 zeroext %extra, i32 %flags) noinline nounwind ssp !dbg !16 {
define internal fastcc ptr @add_name_internal(ptr %name, i32 %len, i32 %hash, i8 zeroext %extra, i32 %flags) noinline nounwind ssp !dbg !16 {
;
entry:
call void @llvm.dbg.value(metadata i8* %name, metadata !15, metadata !DIExpression()), !dbg !DILocation(scope: !16)
call void @llvm.dbg.value(metadata ptr %name, metadata !15, metadata !DIExpression()), !dbg !DILocation(scope: !16)
call void @llvm.dbg.value(metadata i32 %len, metadata !20, metadata !DIExpression()), !dbg !DILocation(scope: !16)
call void @llvm.dbg.value(metadata i32 %hash, metadata !21, metadata !DIExpression()), !dbg !DILocation(scope: !16)
call void @llvm.dbg.value(metadata i8 %extra, metadata !22, metadata !DIExpression()), !dbg !DILocation(scope: !16)
Expand All @@ -38,8 +38,8 @@ bb1: ; preds = %entry
br label %bb2, !dbg !27

bb2: ; preds = %bb1, %bb
%.0 = phi i8* [ getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), %bb ], [ %name, %bb1 ] ; <i8*> [#uses=1]
ret i8* %.0, !dbg !27
%.0 = phi ptr [ @.str, %bb ], [ %name, %bb1 ] ; <ptr> [#uses=1]
ret ptr %.0, !dbg !27
}

declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
; RUN: opt %s -passes=deadargelim -S | FileCheck %s


@block_addr = global i8* blockaddress(@varargs_func, %l1)
; CHECK: @block_addr = global i8* blockaddress(@varargs_func, %l1)
@block_addr = global ptr blockaddress(@varargs_func, %l1)
; CHECK: @block_addr = global ptr blockaddress(@varargs_func, %l1)


; This function is referenced by a "blockaddress" constant but it is
; not address-taken, so the pass should be able to remove its unused
; varargs.

define internal i32 @varargs_func(i8* %addr, ...) {
indirectbr i8* %addr, [ label %l1, label %l2 ]
define internal i32 @varargs_func(ptr %addr, ...) {
indirectbr ptr %addr, [ label %l1, label %l2 ]
l1:
ret i32 1
l2:
ret i32 2
}
; CHECK: define internal i32 @varargs_func(i8* %addr) {
; CHECK: define internal i32 @varargs_func(ptr %addr) {

define i32 @caller(i8* %addr) {
%r = call i32 (i8*, ...) @varargs_func(i8* %addr)
define i32 @caller(ptr %addr) {
%r = call i32 (ptr, ...) @varargs_func(ptr %addr)
ret i32 %r
}
; CHECK: %r = call i32 @varargs_func(i8* %addr)
; CHECK: %r = call i32 @varargs_func(ptr %addr)
10 changes: 5 additions & 5 deletions llvm/test/Transforms/DeadArgElim/NoundefAttrs.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
; attributes that imply immediate undefined behavior must be deleted.
; Other attributes like nonnull, which only imply poison, can be safely kept.

; CHECK: define i64 @bar(i64* nonnull %0, i64 %1)
define i64 @bar(i64* nonnull dereferenceable(8) %0, i64 %1) {
; CHECK: define i64 @bar(ptr nonnull %0, i64 %1)
define i64 @bar(ptr nonnull dereferenceable(8) %0, i64 %1) {
entry:
%2 = add i64 %1, 8
ret i64 %2
}

define i64 @foo(i64* %p, i64 %v) {
; CHECK: %retval = call i64 @bar(i64* nonnull poison, i64 %v)
%retval = call i64 @bar(i64* nonnull dereferenceable(8) %p, i64 %v)
define i64 @foo(ptr %p, i64 %v) {
; CHECK: %retval = call i64 @bar(ptr nonnull poison, i64 %v)
%retval = call i64 @bar(ptr nonnull dereferenceable(8) %p, i64 %v)
ret i64 %retval
}
24 changes: 12 additions & 12 deletions llvm/test/Transforms/DeadArgElim/aggregates.ll
Original file line number Diff line number Diff line change
Expand Up @@ -137,27 +137,27 @@ define i32 @test_ret_applies_to_all() {
; be reduced. There is scope for further optimisation here (though not visible
; in this test-case).

; CHECK-LABEL: define internal { i8*, i32 } @inner()
; CHECK-LABEL: define internal { ptr, i32 } @inner()

define internal {i8*, i32} @mid() {
%res = call {i8*, i32} @inner()
%intval = extractvalue {i8*, i32} %res, 1
define internal {ptr, i32} @mid() {
%res = call {ptr, i32} @inner()
%intval = extractvalue {ptr, i32} %res, 1
%tst = icmp eq i32 %intval, 42
br i1 %tst, label %true, label %true

true:
ret {i8*, i32} %res
ret {ptr, i32} %res
}

define internal {i8*, i32} @inner() {
ret {i8*, i32} {i8* null, i32 42}
define internal {ptr, i32} @inner() {
ret {ptr, i32} {ptr null, i32 42}
}

define internal i8 @outer() {
%res = call {i8*, i32} @mid()
%resptr = extractvalue {i8*, i32} %res, 0
%res = call {ptr, i32} @mid()
%resptr = extractvalue {ptr, i32} %res, 0

%val = load i8, i8* %resptr
%val = load i8, ptr %resptr
ret i8 %val
}

Expand All @@ -170,7 +170,7 @@ entry:
; CHECK: %[[invoke:.*]] = invoke i32 @agg_ret()
; CHECK: %[[oldret:.*]] = insertvalue { i32 } poison, i32 %[[invoke]], 0
; CHECK: phi { i32 } [ %[[oldret]],
define void @PR24906() personality i32 (i32)* poison {
define void @PR24906() personality ptr poison {
entry:
%tmp2 = invoke { i32 } @agg_ret()
to label %bb3 unwind label %bb4
Expand All @@ -180,7 +180,7 @@ bb3:
unreachable

bb4:
%tmp4 = landingpad { i8*, i32 }
%tmp4 = landingpad { ptr, i32 }
cleanup
unreachable
}
8 changes: 4 additions & 4 deletions llvm/test/Transforms/DeadArgElim/basictest.ll
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
; RUN: opt < %s -passes=deadargelim -S | not grep DEADARG

; test - an obviously dead argument
define internal i32 @test(i32 %v, i32 %DEADARG1, i32* %p) {
store i32 %v, i32* %p
define internal i32 @test(i32 %v, i32 %DEADARG1, ptr %p) {
store i32 %v, ptr %p
ret i32 %v
}

; hardertest - an argument which is only used by a call of a function with a
; dead argument.
define internal i32 @hardertest(i32 %DEADARG2) {
%p = alloca i32 ; <i32*> [#uses=1]
%V = call i32 @test( i32 5, i32 %DEADARG2, i32* %p ) ; <i32> [#uses=1]
%p = alloca i32 ; <ptr> [#uses=1]
%V = call i32 @test( i32 5, i32 %DEADARG2, ptr %p ) ; <i32> [#uses=1]
ret i32 %V
}

Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/DeadArgElim/byref.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

declare void @sideeffect()

define void @unused_byref_arg(i32* byref(i32) %dead_arg) {
define void @unused_byref_arg(ptr byref(i32) %dead_arg) {
; CHECK-LABEL: @unused_byref_arg(
; CHECK-NEXT: tail call void @sideeffect()
; CHECK-NEXT: ret void
Expand All @@ -12,9 +12,9 @@ define void @unused_byref_arg(i32* byref(i32) %dead_arg) {
ret void
}

define void @dont_replace_by_poison(i32* %ptr) {
define void @dont_replace_by_poison(ptr %ptr) {
; CHECK-LABEL: @dont_replace_by_poison(
; CHECK-NEXT: call void @unused_byref_arg(i32* byref(i32) poison)
; CHECK-NEXT: call void @unused_byref_arg(ptr byref(i32) poison)
; CHECK-NEXT: ret void
;
call void @unused_byref_arg(i32* byref(i32) %ptr)
Expand Down
26 changes: 13 additions & 13 deletions llvm/test/Transforms/DeadArgElim/dbginfo-preserve-dbgloc.ll
Original file line number Diff line number Diff line change
Expand Up @@ -8,49 +8,49 @@ define void @f2(i32 %m, i32 %n) #0 !dbg !7 {
entry:
call void @llvm.dbg.value(metadata i32 %m, metadata !12, metadata !DIExpression()), !dbg !21
call void @llvm.dbg.value(metadata i32 %n, metadata !13, metadata !DIExpression()), !dbg !22
call void @llvm.dbg.value(metadata %struct.Channel* null, metadata !14, metadata !DIExpression()), !dbg !23
%call = call %struct.Channel* (...) @foo(), !dbg !24
call void @llvm.dbg.value(metadata %struct.Channel* %call, metadata !14, metadata !DIExpression()), !dbg !23
call void @llvm.dbg.value(metadata ptr null, metadata !14, metadata !DIExpression()), !dbg !23
%call = call ptr (...) @foo(), !dbg !24
call void @llvm.dbg.value(metadata ptr %call, metadata !14, metadata !DIExpression()), !dbg !23
%cmp = icmp sgt i32 %m, 3, !dbg !25
br i1 %cmp, label %if.then, label %if.end, !dbg !27

if.then: ; preds = %entry
%call1 = call zeroext i1 @f1(i1 zeroext true, %struct.Channel* %call), !dbg !28
%call1 = call zeroext i1 @f1(i1 zeroext true, ptr %call), !dbg !28
br label %if.end, !dbg !28

if.end: ; preds = %if.then, %entry
%cmp2 = icmp sgt i32 %n, %m, !dbg !29
br i1 %cmp2, label %if.then3, label %if.end5, !dbg !31

if.then3: ; preds = %if.end
%call4 = call zeroext i1 @f1(i1 zeroext false, %struct.Channel* %call), !dbg !32
%call4 = call zeroext i1 @f1(i1 zeroext false, ptr %call), !dbg !32
br label %if.end5, !dbg !32

if.end5: ; preds = %if.then3, %if.end
ret void, !dbg !33
}

declare %struct.Channel* @foo(...) local_unnamed_addr #1
declare ptr @foo(...) local_unnamed_addr #1

; Function Attrs: noinline nounwind uwtable
define internal zeroext i1 @f1(i1 zeroext %is_y, %struct.Channel* %str) #4 !dbg !34 {
define internal zeroext i1 @f1(i1 zeroext %is_y, ptr %str) #4 !dbg !34 {
entry:
%frombool = zext i1 %is_y to i8
; CHECK: call void @llvm.dbg.value(metadata i1 %is_y, metadata !39, metadata !DIExpression()), !dbg !42
call void @llvm.dbg.value(metadata i1 %is_y, metadata !39, metadata !DIExpression()), !dbg !42
; CHECK: call void @llvm.dbg.value(metadata %struct.Channel* %str, metadata !40, metadata !DIExpression()), !dbg !43
call void @llvm.dbg.value(metadata %struct.Channel* %str, metadata !40, metadata !DIExpression()), !dbg !43
call void @llvm.dbg.value(metadata %struct.Channel* null, metadata !41, metadata !DIExpression()), !dbg !44
%tobool = icmp ne %struct.Channel* %str, null, !dbg !45
; CHECK: call void @llvm.dbg.value(metadata ptr %str, metadata !40, metadata !DIExpression()), !dbg !43
call void @llvm.dbg.value(metadata ptr %str, metadata !40, metadata !DIExpression()), !dbg !43
call void @llvm.dbg.value(metadata ptr null, metadata !41, metadata !DIExpression()), !dbg !44
%tobool = icmp ne ptr %str, null, !dbg !45
br i1 %tobool, label %if.end, label %if.then, !dbg !47

if.then: ; preds = %entry
call void (...) @baa(), !dbg !48
br label %cleanup, !dbg !50

if.end: ; preds = %entry
%call = call %struct.Channel* (...) @foo(), !dbg !51
call void @llvm.dbg.value(metadata %struct.Channel* %call, metadata !41, metadata !DIExpression()), !dbg !44
%call = call ptr (...) @foo(), !dbg !51
call void @llvm.dbg.value(metadata ptr %call, metadata !41, metadata !DIExpression()), !dbg !44
%tobool1 = trunc i8 %frombool to i1, !dbg !52
br i1 %tobool1, label %if.then2, label %if.end3, !dbg !56

Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval.ll
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ define dso_local void @f2(i32 %k) local_unnamed_addr !dbg !11 {
entry:
; CHECK: call void @llvm.dbg.value(metadata i32 poison, metadata !15, metadata !DIExpression()), !dbg !16
call void @llvm.dbg.value(metadata i32 %k, metadata !15, metadata !DIExpression()), !dbg !16
%0 = load i32, i32* @s, align 4, !dbg !17
%0 = load i32, ptr @s, align 4, !dbg !17
%inc = add nsw i32 %0, 1, !dbg !17
store i32 %inc, i32* @s, align 4, !dbg !17
call void @llvm.dbg.value(metadata i32* @s, metadata !15, metadata !DIExpression(DW_OP_deref)), !dbg !16
store i32 %inc, ptr @s, align 4, !dbg !17
call void @llvm.dbg.value(metadata ptr @s, metadata !15, metadata !DIExpression(DW_OP_deref)), !dbg !16
ret void, !dbg !18
}

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/DeadArgElim/dead_vaargs.ll
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ define internal void @thunk(i32 %X, ...) {

define internal i32 @has_vastart(i32 %X, ...) {
%valist = alloca i8
call void @llvm.va_start(i8* %valist)
call void @llvm.va_start(ptr %valist)
ret i32 %X
}
; CHECK-LABEL: define internal i32 @has_vastart(i32 %X, ...)

declare void @llvm.va_start(i8*)
declare void @llvm.va_start(ptr)

define internal i32 @no_vastart(i32 %X, ...) {
ret i32 %X
Expand Down
14 changes: 7 additions & 7 deletions llvm/test/Transforms/DeadArgElim/deadexternal.ll
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ entry:
define void @h() {
entry:
%i = alloca i32, align 4
store volatile i32 10, i32* %i, align 4
; CHECK: %tmp = load volatile i32, i32* %i, align 4
store volatile i32 10, ptr %i, align 4
; CHECK: %tmp = load volatile i32, ptr %i, align 4
; CHECK-NEXT: call void @f(i32 poison)
%tmp = load volatile i32, i32* %i, align 4
%tmp = load volatile i32, ptr %i, align 4
call void @f(i32 %tmp)
ret void
}
Expand All @@ -52,16 +52,16 @@ entry:

%swift_error = type opaque

define void @unused_swifterror_arg(%swift_error** swifterror %dead_arg) {
define void @unused_swifterror_arg(ptr swifterror %dead_arg) {
tail call void @sideeffect() nounwind
ret void
}

; CHECK-LABEL: @dont_replace_by_poison
; CHECK-NOT: call void @unused_swifterror_arg({{.*}}poison)
define void @dont_replace_by_poison() {
%error_ptr_ref = alloca swifterror %swift_error*
store %swift_error* null, %swift_error** %error_ptr_ref
call void @unused_swifterror_arg(%swift_error** %error_ptr_ref)
%error_ptr_ref = alloca swifterror ptr
store ptr null, ptr %error_ptr_ref
call void @unused_swifterror_arg(ptr %error_ptr_ref)
ret void
}
20 changes: 10 additions & 10 deletions llvm/test/Transforms/DeadArgElim/deadretval.ll
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,21 @@ define i32 @test3() {
; The callee function's return type shouldn't be changed if the call result is
; used.

; CHECK-LABEL: define internal i8* @callee4()
; CHECK-LABEL: define internal ptr @callee4()

define internal i8* @callee4(i8* %a0) {
ret i8* @g0;
define internal ptr @callee4(ptr %a0) {
ret ptr @g0;
}

declare void @llvm.objc.clang.arc.noop.use(...)

; CHECK-LABEL: define i8* @test4(
; CHECK: tail call i8* @callee4() [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
; CHECK-LABEL: define ptr @test4(
; CHECK: tail call ptr @callee4() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]

define i8* @test4() {
%call = tail call i8* @callee4(i8* @g0) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
call void (...) @llvm.objc.clang.arc.noop.use(i8* %call)
ret i8* @g0
define ptr @test4() {
%call = tail call ptr @callee4(ptr @g0) [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
call void (...) @llvm.objc.clang.arc.noop.use(ptr %call)
ret ptr @g0
}

declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*)
declare ptr @llvm.objc.retainAutoreleasedReturnValue(ptr)
4 changes: 2 additions & 2 deletions llvm/test/Transforms/DeadArgElim/deadretval2.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; RUN: cat %t | not grep DEAD
; RUN: cat %t | grep LIVE | count 4

@P = external global i32 ; <i32*> [#uses=1]
@P = external global i32 ; <ptr> [#uses=1]

; Dead arg only used by dead retval
define internal i32 @test(i32 %DEADARG) {
Expand All @@ -20,7 +20,7 @@ define void @test3(i32 %X) {
}

define internal i32 @foo() {
%DEAD = load i32, i32* @P ; <i32> [#uses=1]
%DEAD = load i32, ptr @P ; <i32> [#uses=1]
ret i32 %DEAD
}

Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/DeadArgElim/fct_ptr.ll
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@
; statically known, by replacing the related arguments with poison.
; This is what we check on the call that produces %res2.

define i32 @call_indirect(i32 (i32, i32, i32)* readnone %fct_ptr, i32 %arg1, i32 %arg2, i32 %arg3) {
define i32 @call_indirect(ptr readnone %fct_ptr, i32 %arg1, i32 %arg2, i32 %arg3) {
; CHECK-LABEL: @call_indirect(
; CHECK-NEXT: [[CMP0:%.*]] = icmp eq i32 (i32, i32, i32)* [[FCT_PTR:%.*]], @external_fct
; CHECK-NEXT: [[CMP0:%.*]] = icmp eq ptr [[FCT_PTR:%.*]], @external_fct
; CHECK-NEXT: br i1 [[CMP0]], label [[CALL_EXT:%.*]], label [[CHK2:%.*]]
; CHECK: call_ext:
; CHECK-NEXT: [[RES1:%.*]] = tail call i32 @external_fct(i32 poison, i32 [[ARG2:%.*]], i32 poison)
; CHECK-NEXT: br label [[END:%.*]]
; CHECK: chk2:
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 (i32, i32, i32)* [[FCT_PTR]], @internal_fct
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq ptr [[FCT_PTR]], @internal_fct
; CHECK-NEXT: br i1 [[CMP1]], label [[CALL_INT:%.*]], label [[CALL_OTHER:%.*]]
; CHECK: call_int:
; CHECK-NEXT: [[RES2:%.*]] = tail call i32 @internal_fct(i32 poison, i32 [[ARG2]], i32 poison)
Expand All @@ -36,7 +36,7 @@ call_ext:
br label %end

chk2:
%cmp1 = icmp eq i32 (i32, i32, i32)* %fct_ptr, @internal_fct
%cmp1 = icmp eq ptr %fct_ptr, @internal_fct
br i1 %cmp1, label %call_int, label %call_other

call_int:
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/DeadArgElim/func_metadata.ll
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@ target triple = "x86_64-unknown-linux-gnu"
define internal i32 @va_func(i32 %num, ...) !prof !28 !PGOFuncName !29{
; CHECK: define internal void @va_func(i32 %num) !prof ![[ENTRYCOUNT:[0-9]+]] !PGOFuncName ![[PGOFUNCNAME1:[0-9]+]] {
entry:
%0 = load i32, i32* @s, align 4, !tbaa !31
%0 = load i32, ptr @s, align 4, !tbaa !31
%add = add nsw i32 %0, %num
store i32 %add, i32* @s, align 4, !tbaa !31
store i32 %add, ptr @s, align 4, !tbaa !31
ret i32 0
}

define internal fastcc i32 @foo() unnamed_addr !prof !28 !PGOFuncName !30 {
; CHECK: define internal fastcc void @foo() unnamed_addr !prof ![[ENTRYCOUNT:[0-9]+]] !PGOFuncName ![[PGOFUNCNAME2:[0-9]+]] {
entry:
%0 = load i32, i32* @s, align 4, !tbaa !31
%0 = load i32, ptr @s, align 4, !tbaa !31
%add = add nsw i32 %0, 8
store i32 %add, i32* @s, align 4, !tbaa !31
store i32 %add, ptr @s, align 4, !tbaa !31
ret i32 0
}

Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/DeadArgElim/funclet.ll
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
; RUN: opt -S -passes=deadargelim < %s | FileCheck %s
target triple = "x86_64-pc-windows-msvc"

define internal void @callee(i8*) {
define internal void @callee(ptr) {
entry:
call void @thunk()
ret void
}

define void @test1() personality i32 (...)* @__CxxFrameHandler3 {
define void @test1() personality ptr @__CxxFrameHandler3 {
entry:
invoke void @thunk()
to label %good1 unwind label %bad1
Expand All @@ -17,7 +17,7 @@ good1: ; preds = %entry-block

bad1: ; preds = %entry-block
%pad1 = cleanuppad within none []
call void @callee(i8* null) [ "funclet"(token %pad1) ]
call void @callee(ptr null) [ "funclet"(token %pad1) ]
cleanupret from %pad1 unwind to caller
}
; CHECK-LABEL: define void @test1(
Expand Down
25 changes: 12 additions & 13 deletions llvm/test/Transforms/DeadArgElim/keepalive.ll
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
; RUN: opt < %s -passes=deadargelim -S | FileCheck %s

declare token @llvm.call.preallocated.setup(i32)
declare i8* @llvm.call.preallocated.arg(token, i32)
declare ptr @llvm.call.preallocated.arg(token, i32)

%Ty = type <{ i32, i32 }>

Expand Down Expand Up @@ -39,43 +39,42 @@ define void @caller() {

; We can't remove 'this' here, as that would put argmem in ecx instead of
; memory.
define internal x86_thiscallcc i32 @unused_this(i32* %this, i32* inalloca(i32) %argmem) {
define internal x86_thiscallcc i32 @unused_this(ptr %this, ptr inalloca(i32) %argmem) {
;
;
%v = load i32, i32* %argmem
%v = load i32, ptr %argmem
ret i32 %v
}
; CHECK-LABEL: define internal x86_thiscallcc i32 @unused_this(i32* %this, i32* inalloca(i32) %argmem)
; CHECK-LABEL: define internal x86_thiscallcc i32 @unused_this(ptr %this, ptr inalloca(i32) %argmem)

define i32 @caller2() {
;
;
%t = alloca i32
%m = alloca inalloca i32
store i32 42, i32* %m
%v = call x86_thiscallcc i32 @unused_this(i32* %t, i32* inalloca(i32) %m)
store i32 42, ptr %m
%v = call x86_thiscallcc i32 @unused_this(ptr %t, ptr inalloca(i32) %m)
ret i32 %v
}

; We can't remove 'this' here, as that would put argmem in ecx instead of
; memory.
define internal x86_thiscallcc i32 @unused_this_preallocated(i32* %this, i32* preallocated(i32) %argmem) {
define internal x86_thiscallcc i32 @unused_this_preallocated(ptr %this, ptr preallocated(i32) %argmem) {
;
;
%v = load i32, i32* %argmem
%v = load i32, ptr %argmem
ret i32 %v
}
; CHECK-LABEL: define internal x86_thiscallcc i32 @unused_this_preallocated(i32* %this, i32* preallocated(i32) %argmem)
; CHECK-LABEL: define internal x86_thiscallcc i32 @unused_this_preallocated(ptr %this, ptr preallocated(i32) %argmem)

define i32 @caller3() {
;
;
%t = alloca i32
%c = call token @llvm.call.preallocated.setup(i32 1)
%M = call i8* @llvm.call.preallocated.arg(token %c, i32 0) preallocated(i32)
%m = bitcast i8* %M to i32*
store i32 42, i32* %m
%v = call x86_thiscallcc i32 @unused_this_preallocated(i32* %t, i32* preallocated(i32) %m) ["preallocated"(token %c)]
%M = call ptr @llvm.call.preallocated.arg(token %c, i32 0) preallocated(i32)
store i32 42, ptr %M
%v = call x86_thiscallcc i32 @unused_this_preallocated(ptr %t, ptr preallocated(i32) %M) ["preallocated"(token %c)]
ret i32 %v
}

Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/DeadArgElim/linkage.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@
; rdar://11546243
%struct.A = type { i8 }

define available_externally void @_Z17externallyDefinedP1A(%struct.A* %a) {
define available_externally void @_Z17externallyDefinedP1A(ptr %a) {
entry:
call void @_Z3foov()
ret void
}

declare void @_Z3foov()

define void @_Z4testP1A(%struct.A* %a) {
define void @_Z4testP1A(ptr %a) {
; CHECK: @_Z4testP1A
; CHECK: @_Z17externallyDefinedP1A(%struct.A* %a)
; CHECK: @_Z17externallyDefinedP1A(ptr %a)

entry:
call void @_Z17externallyDefinedP1A(%struct.A* %a)
call void @_Z17externallyDefinedP1A(ptr %a)
ret void
}
2 changes: 1 addition & 1 deletion llvm/test/Transforms/DeadArgElim/preserve-used-ret.ll
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ start:

declare dso_local i32 @test(i64, i64)

define i32 @main(i32 %argc, i8** %argv) {
define i32 @main(i32 %argc, ptr %argv) {
start:
%x = call { i64, i64 } @g(i64 13, i64 42)
%x.0 = extractvalue { i64, i64 } %x, 0
Expand Down
56 changes: 28 additions & 28 deletions llvm/test/Transforms/DeadArgElim/returned.ll
Original file line number Diff line number Diff line change
Expand Up @@ -5,58 +5,58 @@
; Validate that the argument and return value are both dead
; CHECK-LABEL: define internal void @test1()

define internal %Ty* @test1(%Ty* %this) {
ret %Ty* %this
define internal ptr @test1(ptr %this) {
ret ptr %this
}

; do not keep alive the return value of a function with a dead 'returned' argument
; CHECK-LABEL: define internal void @test2()

define internal %Ty* @test2(%Ty* returned %this) {
ret %Ty* %this
define internal ptr @test2(ptr returned %this) {
ret ptr %this
}

; dummy to keep 'this' alive
@dummy = global %Ty* null
@dummy = global ptr null

; Validate that return value is dead
; CHECK-LABEL: define internal void @test3(%Ty* %this)
; CHECK-LABEL: define internal void @test3(ptr %this)

define internal %Ty* @test3(%Ty* %this) {
store volatile %Ty* %this, %Ty** @dummy
ret %Ty* %this
define internal ptr @test3(ptr %this) {
store volatile ptr %this, ptr @dummy
ret ptr %this
}

; keep alive return value of a function if the 'returned' argument is live
; CHECK-LABEL: define internal %Ty* @test4(%Ty* returned %this)
; CHECK-LABEL: define internal ptr @test4(ptr returned %this)

define internal %Ty* @test4(%Ty* returned %this) {
store volatile %Ty* %this, %Ty** @dummy
ret %Ty* %this
define internal ptr @test4(ptr returned %this) {
store volatile ptr %this, ptr @dummy
ret ptr %this
}

; don't do this if 'returned' is on the call site...
; CHECK-LABEL: define internal void @test5(%Ty* %this)
; CHECK-LABEL: define internal void @test5(ptr %this)

define internal %Ty* @test5(%Ty* %this) {
store volatile %Ty* %this, %Ty** @dummy
ret %Ty* %this
define internal ptr @test5(ptr %this) {
store volatile ptr %this, ptr @dummy
ret ptr %this
}

; Drop all these attributes
; CHECK-LABEL: define internal void @test6
define internal align 8 dereferenceable_or_null(2) noundef noalias i8* @test6() {
ret i8* null
define internal align 8 dereferenceable_or_null(2) noundef noalias ptr @test6() {
ret ptr null
}

define %Ty* @caller(%Ty* %this) {
%1 = call %Ty* @test1(%Ty* %this)
%2 = call %Ty* @test2(%Ty* %this)
%3 = call %Ty* @test3(%Ty* %this)
%4 = call %Ty* @test4(%Ty* %this)
define ptr @caller(ptr %this) {
%1 = call ptr @test1(ptr %this)
%2 = call ptr @test2(ptr %this)
%3 = call ptr @test3(ptr %this)
%4 = call ptr @test4(ptr %this)
; ...instead, drop 'returned' form the call site
; CHECK: call void @test5(%Ty* %this)
%5 = call %Ty* @test5(%Ty* returned %this)
%6 = call i8* @test6()
ret %Ty* %this
; CHECK: call void @test5(ptr %this)
%5 = call ptr @test5(ptr returned %this)
%6 = call ptr @test6()
ret ptr %this
}
18 changes: 9 additions & 9 deletions llvm/test/Transforms/DeadArgElim/variadic_safety.ll
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
; RUN: opt < %s -passes=deadargelim -S | FileCheck %s

declare void @llvm.va_start(i8*)
declare void @llvm.va_start(ptr)

define internal i32 @va_func(i32 %a, i32 %b, ...) {
%valist = alloca i8
call void @llvm.va_start(i8* %valist)
call void @llvm.va_start(ptr %valist)

ret i32 %b
}
Expand All @@ -16,23 +16,23 @@ define internal i32 @va_func(i32 %a, i32 %b, ...) {
; it.
define i32 @call_va(i32 %in) {
%stacked = alloca i32
store i32 42, i32* %stacked
%res = call i32(i32, i32, ...) @va_func(i32 %in, i32 %in, [6 x i32] poison, i32* byval(i32) %stacked)
store i32 42, ptr %stacked
%res = call i32(i32, i32, ...) @va_func(i32 %in, i32 %in, [6 x i32] poison, ptr byval(i32) %stacked)
ret i32 %res
; CHECK: call i32 (i32, i32, ...) @va_func(i32 poison, i32 %in, [6 x i32] poison, i32* byval(i32) %stacked)
; CHECK: call i32 (i32, i32, ...) @va_func(i32 poison, i32 %in, [6 x i32] poison, ptr byval(i32) %stacked)
}

define internal i32 @va_deadret_func(i32 %a, i32 %b, ...) {
%valist = alloca i8
call void @llvm.va_start(i8* %valist)
call void @llvm.va_start(ptr %valist)

ret i32 %a
}

define void @call_deadret(i32 %in) {
%stacked = alloca i32
store i32 42, i32* %stacked
call i32 (i32, i32, ...) @va_deadret_func(i32 poison, i32 %in, [6 x i32] poison, i32* byval(i32) %stacked)
store i32 42, ptr %stacked
call i32 (i32, i32, ...) @va_deadret_func(i32 poison, i32 %in, [6 x i32] poison, ptr byval(i32) %stacked)
ret void
; CHECK: call void (i32, i32, ...) @va_deadret_func(i32 poison, i32 poison, [6 x i32] poison, i32* byval(i32) %stacked)
; CHECK: call void (i32, i32, ...) @va_deadret_func(i32 poison, i32 poison, [6 x i32] poison, ptr byval(i32) %stacked)
}
6 changes: 3 additions & 3 deletions llvm/test/Transforms/EntryExitInstrumenter/debug-info.ll
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ target triple = "x86_64-unknown-linux-gnu"
define i32 @f(i32 %x) #0 !dbg !7 {
entry:
%x.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
store i32 %x, ptr %x.addr, align 4
ret i32 42, !dbg !12

; CHECK-LABEL: define i32 @f(i32 %x)
; CHECK: call i8* @llvm.returnaddress(i32 0), !dbg ![[ENTRYLOC:[0-9]+]]
; CHECK: call ptr @llvm.returnaddress(i32 0), !dbg ![[ENTRYLOC:[0-9]+]]
; CHECK: call void @__cyg_profile_func_enter{{.*}}, !dbg ![[ENTRYLOC]]

; CHECK: call i8* @llvm.returnaddress(i32 0), !dbg ![[EXITLOC:[0-9]+]]
; CHECK: call ptr @llvm.returnaddress(i32 0), !dbg ![[EXITLOC:[0-9]+]]
; CHECK: call void @__cyg_profile_func_exit{{.*}}, !dbg ![[EXITLOC]]
; CHECK: ret i32 42, !dbg ![[EXITLOC]]
}
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/GVNHoist/hoist-drop-debug-info.ll
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ entry:
], !dbg !11

sw0: ; preds = %entry
store i32 1, i32* @G, align 4, !dbg !12
store i32 1, ptr @G, align 4, !dbg !12
br label %exit, !dbg !13

sw1: ; preds = %entry
store i32 1, i32* @G, align 4, !dbg !14
store i32 1, ptr @G, align 4, !dbg !14
br label %exit, !dbg !15

exit1: ; preds = %entry
store i32 1, i32* @G, align 4, !dbg !16
store i32 1, ptr @G, align 4, !dbg !16
ret void, !dbg !17

exit: ; preds = %sw1, %sw0
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/Transforms/GVNHoist/hoist-inline.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
; Check that the inlined loads are hoisted.
; CHECK-LABEL: define i32 @fun(
; CHECK-LABEL: entry:
; CHECK: load i32, i32* @A
; CHECK: load i32, ptr @A
; CHECK: if.then:

@A = external global i32
Expand All @@ -13,7 +13,7 @@
@E = external global i32

define i32 @loadA() {
%a = load i32, i32* @A
%a = load i32, ptr @A
ret i32 %a
}

Expand All @@ -22,15 +22,15 @@ entry:
br i1 %c, label %if.then, label %if.else

if.then:
store i32 1, i32* @B
store i32 1, ptr @B
%call1 = call i32 @loadA()
store i32 2, i32* @C
store i32 2, ptr @C
br label %if.endif

if.else:
store i32 2, i32* @D
store i32 2, ptr @D
%call2 = call i32 @loadA()
store i32 1, i32* @E
store i32 1, ptr @E
br label %if.endif

if.endif:
Expand Down
62 changes: 31 additions & 31 deletions llvm/test/Transforms/GVNHoist/hoist-md.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,67 +2,67 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @test1(i1 %b, i32* %x) {
define void @test1(i1 %b, ptr %x) {
entry:
br i1 %b, label %if.then, label %if.else

if.then: ; preds = %entry
store i32 2, i32* %x, align 4, !tbaa !1
store i32 2, ptr %x, align 4, !tbaa !1
br label %if.end

if.else: ; preds = %entry
store i32 2, i32* %x, align 4, !tbaa !5
store i32 2, ptr %x, align 4, !tbaa !5
br label %if.end

if.end: ; preds = %if.else, %if.then
ret void
}
; CHECK-LABEL: define void @test1(
; CHECK: store i32 2, i32* %x, align 4
; CHECK: store i32 2, ptr %x, align 4
; CHECK-NEXT: br i1 %b

define void @test2(i1 %b, i32* %x) {
define void @test2(i1 %b, ptr %x) {
entry:
br i1 %b, label %if.then, label %if.else

if.then: ; preds = %entry
%gep1 = getelementptr inbounds i32, i32* %x, i64 1
store i32 2, i32* %gep1, align 4, !tbaa !1
%gep1 = getelementptr inbounds i32, ptr %x, i64 1
store i32 2, ptr %gep1, align 4, !tbaa !1
br label %if.end

if.else: ; preds = %entry
%gep2 = getelementptr inbounds i32, i32* %x, i64 1
store i32 2, i32* %gep2, align 4, !tbaa !5
%gep2 = getelementptr inbounds i32, ptr %x, i64 1
store i32 2, ptr %gep2, align 4, !tbaa !5
br label %if.end

if.end: ; preds = %if.else, %if.then
ret void
}
; CHECK-LABEL: define void @test2(
; CHECK: %[[gep:.*]] = getelementptr inbounds i32, i32* %x, i64 1
; CHECK: store i32 2, i32* %[[gep]], align 4
; CHECK: %[[gep:.*]] = getelementptr inbounds i32, ptr %x, i64 1
; CHECK: store i32 2, ptr %[[gep]], align 4
; CHECK-NEXT: br i1 %b

define void @test3(i1 %b, i32* %x) {
define void @test3(i1 %b, ptr %x) {
entry:
br i1 %b, label %if.then, label %if.else

if.then: ; preds = %entry
%gep1 = getelementptr inbounds i32, i32* %x, i64 1
store i32 2, i32* %gep1, align 4, !tbaa !1
%gep1 = getelementptr inbounds i32, ptr %x, i64 1
store i32 2, ptr %gep1, align 4, !tbaa !1
br label %if.end

if.else: ; preds = %entry
%gep2 = getelementptr i32, i32* %x, i64 1
store i32 2, i32* %gep2, align 4, !tbaa !5
%gep2 = getelementptr i32, ptr %x, i64 1
store i32 2, ptr %gep2, align 4, !tbaa !5
br label %if.end

if.end: ; preds = %if.else, %if.then
ret void
}
; CHECK-LABEL: define void @test3(
; CHECK: %[[gep:.*]] = getelementptr i32, i32* %x, i64 1
; CHECK: store i32 2, i32* %[[gep]], align 4
; CHECK: %[[gep:.*]] = getelementptr i32, ptr %x, i64 1
; CHECK: store i32 2, ptr %[[gep]], align 4
; CHECK-NEXT: br i1 %b

!1 = !{!2, !2, i64 0}
Expand All @@ -72,48 +72,48 @@ if.end: ; preds = %if.else, %if.then
!5 = !{!6, !6, i64 0}
!6 = !{!"_ZTS1e", !3, i64 0}

define i32 @test4(i1 %b, i32* %y) {
define i32 @test4(i1 %b, ptr %y) {
entry:
br i1 %b, label %if.then, label %if.end

if.then: ; preds = %entry
%0 = load i32, i32* %y, align 4, !range !7
%0 = load i32, ptr %y, align 4, !range !7
br label %return

if.end: ; preds = %entry
%1 = load i32, i32* %y, align 4, !range !8
%1 = load i32, ptr %y, align 4, !range !8
br label %return

return: ; preds = %if.end, %if.then
%retval.0 = phi i32 [ %0, %if.then ], [ %1, %if.end ]
ret i32 %retval.0
}
; CHECK-LABEL: define i32 @test4(
; CHECK: %[[load:.*]] = load i32, i32* %y, align 4, !range ![[range_md:.*]]
; CHECK: %[[load:.*]] = load i32, ptr %y, align 4, !range ![[range_md:.*]]
; CHECK: %[[phi:.*]] = phi i32 [ %[[load]], %{{.*}} ], [ %[[load]], %{{.*}} ]
; CHECK: ret i32 %[[phi]]

define i32* @test5(i1 %b, i32** %y) {
define ptr @test5(i1 %b, ptr %y) {
entry:
br i1 %b, label %if.then, label %if.end

if.then: ; preds = %entry
%0 = load i32*, i32** %y, align 4, !nonnull !9
%0 = load ptr, ptr %y, align 4, !nonnull !9
br label %return

if.end: ; preds = %entry
%1 = load i32*, i32** %y, align 4
%1 = load ptr, ptr %y, align 4
br label %return

return: ; preds = %if.end, %if.then
%retval.0 = phi i32* [ %0, %if.then ], [ %1, %if.end ]
ret i32* %retval.0
%retval.0 = phi ptr [ %0, %if.then ], [ %1, %if.end ]
ret ptr %retval.0
}
; CHECK-LABEL: define i32* @test5(
; CHECK: %[[load:.*]] = load i32*, i32** %y, align 4
; CHECK-LABEL: define ptr @test5(
; CHECK: %[[load:.*]] = load ptr, ptr %y, align 4
; CHECK-NOT: !nonnull
; CHECK: %[[phi:.*]] = phi i32* [ %[[load]], %{{.*}} ], [ %[[load]], %{{.*}} ]
; CHECK: ret i32* %[[phi]]
; CHECK: %[[phi:.*]] = phi ptr [ %[[load]], %{{.*}} ], [ %[[load]], %{{.*}} ]
; CHECK: ret ptr %[[phi]]

!7 = !{i32 0, i32 2}
!8 = !{i32 3, i32 4}
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/GVNHoist/hoist-more-than-two-branches.ll
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ entry:
]

sw0:
store i32 1, i32* @G
store i32 1, ptr @G
br label %exit

sw1:
store i32 1, i32* @G
store i32 1, ptr @G
br label %exit

exit1:
store i32 1, i32* @G
store i32 1, ptr @G
ret void
exit:
ret void
Expand Down
16 changes: 8 additions & 8 deletions llvm/test/Transforms/GVNHoist/hoist-mssa.ll
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,23 @@ bb3: ; preds = %bb1
br i1 undef, label %bb4, label %bb9

bb4: ; preds = %bb3
%tmp = load i32, i32* @optind, align 4
%tmp = load i32, ptr @optind, align 4
br i1 undef, label %bb5, label %bb7

bb5: ; preds = %bb4
%tmp6 = add nsw i32 %tmp, 1
store i32 %tmp6, i32* @optind, align 4
store i32 %tmp6, ptr @optind, align 4
br label %bb12

bb7: ; preds = %bb4
%tmp8 = add nsw i32 %tmp, 1
store i32 %tmp8, i32* @optind, align 4
store i32 %tmp8, ptr @optind, align 4
br label %bb13

bb9: ; preds = %bb3
%tmp10 = load i32, i32* @optind, align 4
%tmp10 = load i32, ptr @optind, align 4
%tmp11 = add nsw i32 %tmp10, 1
store i32 %tmp11, i32* @optind, align 4
store i32 %tmp11, ptr @optind, align 4
br label %bb12

bb12: ; preds = %bb9, %bb5
Expand All @@ -55,15 +55,15 @@ bb13: ; preds = %bb12, %bb7, %bb2
; CHECK-NOT: store float
define float @hoistStoresUpdateMSSA(float %d) {
entry:
store float 0.000000e+00, float* @GlobalVar
store float 0.000000e+00, ptr @GlobalVar
%cmp = fcmp oge float %d, 0.000000e+00
br i1 %cmp, label %if.then, label %if.end

if.then:
store float 0.000000e+00, float* @GlobalVar
store float 0.000000e+00, ptr @GlobalVar
br label %if.end

if.end:
%tmp = load float, float* @GlobalVar, align 4
%tmp = load float, ptr @GlobalVar, align 4
ret float %tmp
}
34 changes: 17 additions & 17 deletions llvm/test/Transforms/GVNHoist/hoist-newgvn.ll
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,25 @@ target triple = "x86_64-unknown-linux-gnu"
; CHECK-NOT: load
; CHECK-NOT: fmul
; CHECK-NOT: fsub
define float @dominatorHoisting(float %d, float* %min, float* %max, float* %a) {
define float @dominatorHoisting(float %d, ptr %min, ptr %max, ptr %a) {
entry:
%div = fdiv float 1.000000e+00, %d
%0 = load float, float* %min, align 4
%1 = load float, float* %a, align 4
%0 = load float, ptr %min, align 4
%1 = load float, ptr %a, align 4
%sub = fsub float %0, %1
%mul = fmul float %sub, %div
%2 = load float, float* %max, align 4
%2 = load float, ptr %max, align 4
%sub1 = fsub float %2, %1
%mul2 = fmul float %sub1, %div
%cmp = fcmp oge float %div, 0.000000e+00
br i1 %cmp, label %if.then, label %if.end

if.then: ; preds = %entry
%3 = load float, float* %max, align 4
%4 = load float, float* %a, align 4
%3 = load float, ptr %max, align 4
%4 = load float, ptr %a, align 4
%sub3 = fsub float %3, %4
%mul4 = fmul float %sub3, %div
%5 = load float, float* %min, align 4
%5 = load float, ptr %min, align 4
%sub5 = fsub float %5, %4
%mul6 = fmul float %sub5, %div
br label %if.end
Expand All @@ -61,35 +61,35 @@ if.end: ; preds = %entry
; CHECK-NOT: load
; CHECK-NOT: fmul
; CHECK-NOT: fsub
define float @domHoisting(float %d, float* %min, float* %max, float* %a) {
define float @domHoisting(float %d, ptr %min, ptr %max, ptr %a) {
entry:
%div = fdiv float 1.000000e+00, %d
%0 = load float, float* %min, align 4
%1 = load float, float* %a, align 4
%0 = load float, ptr %min, align 4
%1 = load float, ptr %a, align 4
%sub = fsub float %0, %1
%mul = fmul float %sub, %div
%2 = load float, float* %max, align 4
%2 = load float, ptr %max, align 4
%sub1 = fsub float %2, %1
%mul2 = fmul float %sub1, %div
%cmp = fcmp oge float %div, 0.000000e+00
br i1 %cmp, label %if.then, label %if.else

if.then:
%3 = load float, float* %max, align 4
%4 = load float, float* %a, align 4
%3 = load float, ptr %max, align 4
%4 = load float, ptr %a, align 4
%sub3 = fsub float %3, %4
%mul4 = fmul float %sub3, %div
%5 = load float, float* %min, align 4
%5 = load float, ptr %min, align 4
%sub5 = fsub float %5, %4
%mul6 = fmul float %sub5, %div
br label %if.end

if.else:
%6 = load float, float* %max, align 4
%7 = load float, float* %a, align 4
%6 = load float, ptr %max, align 4
%7 = load float, ptr %a, align 4
%sub9 = fsub float %6, %7
%mul10 = fmul float %sub9, %div
%8 = load float, float* %min, align 4
%8 = load float, ptr %min, align 4
%sub12 = fsub float %8, %7
%mul13 = fmul float %sub12, %div
br label %if.end
Expand Down
66 changes: 33 additions & 33 deletions llvm/test/Transforms/GVNHoist/hoist-pr20242.ll
Original file line number Diff line number Diff line change
Expand Up @@ -10,68 +10,68 @@ target triple = "x86_64-unknown-linux-gnu"
; CHECK: or i32
; CHECK-NOT: or i32

define i8* @encode(i8* %p, i32 %v) {
define ptr @encode(ptr %p, i32 %v) {
entry:
%p.addr = alloca i8*, align 8
%p.addr = alloca ptr, align 8
%v.addr = alloca i32, align 4
store i8* %p, i8** %p.addr, align 8
store i32 %v, i32* %v.addr, align 4
%0 = load i32, i32* %v.addr, align 4
store ptr %p, ptr %p.addr, align 8
store i32 %v, ptr %v.addr, align 4
%0 = load i32, ptr %v.addr, align 4
%cmp = icmp ult i32 %0, 23
br i1 %cmp, label %if.then, label %if.else

if.then: ; preds = %entry
%1 = load i32, i32* %v.addr, align 4
%1 = load i32, ptr %v.addr, align 4
%or = or i32 %1, 128
%conv = trunc i32 %or to i8
%2 = load i8*, i8** %p.addr, align 8
%incdec.ptr = getelementptr inbounds i8, i8* %2, i32 1
store i8* %incdec.ptr, i8** %p.addr, align 8
store i8 %conv, i8* %2, align 1
%2 = load ptr, ptr %p.addr, align 8
%incdec.ptr = getelementptr inbounds i8, ptr %2, i32 1
store ptr %incdec.ptr, ptr %p.addr, align 8
store i8 %conv, ptr %2, align 1
br label %if.end15

if.else: ; preds = %entry
%3 = load i32, i32* %v.addr, align 4
%3 = load i32, ptr %v.addr, align 4
%cmp1 = icmp ult i32 %3, 42
br i1 %cmp1, label %if.then3, label %if.else9

if.then3: ; preds = %if.else
%4 = load i32, i32* %v.addr, align 4
%4 = load i32, ptr %v.addr, align 4
%or4 = or i32 %4, 128
%conv5 = trunc i32 %or4 to i8
%5 = load i8*, i8** %p.addr, align 8
%incdec.ptr6 = getelementptr inbounds i8, i8* %5, i32 1
store i8* %incdec.ptr6, i8** %p.addr, align 8
store i8 %conv5, i8* %5, align 1
%6 = load i32, i32* %v.addr, align 4
%5 = load ptr, ptr %p.addr, align 8
%incdec.ptr6 = getelementptr inbounds i8, ptr %5, i32 1
store ptr %incdec.ptr6, ptr %p.addr, align 8
store i8 %conv5, ptr %5, align 1
%6 = load i32, ptr %v.addr, align 4
%conv7 = trunc i32 %6 to i8
%7 = load i8*, i8** %p.addr, align 8
%incdec.ptr8 = getelementptr inbounds i8, i8* %7, i32 1
store i8* %incdec.ptr8, i8** %p.addr, align 8
store i8 %conv7, i8* %7, align 1
%7 = load ptr, ptr %p.addr, align 8
%incdec.ptr8 = getelementptr inbounds i8, ptr %7, i32 1
store ptr %incdec.ptr8, ptr %p.addr, align 8
store i8 %conv7, ptr %7, align 1
br label %if.end

if.else9: ; preds = %if.else
%8 = load i32, i32* %v.addr, align 4
%8 = load i32, ptr %v.addr, align 4
%or10 = or i32 %8, 128
%conv11 = trunc i32 %or10 to i8
%9 = load i8*, i8** %p.addr, align 8
%incdec.ptr12 = getelementptr inbounds i8, i8* %9, i32 1
store i8* %incdec.ptr12, i8** %p.addr, align 8
store i8 %conv11, i8* %9, align 1
%10 = load i32, i32* %v.addr, align 4
%9 = load ptr, ptr %p.addr, align 8
%incdec.ptr12 = getelementptr inbounds i8, ptr %9, i32 1
store ptr %incdec.ptr12, ptr %p.addr, align 8
store i8 %conv11, ptr %9, align 1
%10 = load i32, ptr %v.addr, align 4
%shr = lshr i32 %10, 7
%conv13 = trunc i32 %shr to i8
%11 = load i8*, i8** %p.addr, align 8
%incdec.ptr14 = getelementptr inbounds i8, i8* %11, i32 1
store i8* %incdec.ptr14, i8** %p.addr, align 8
store i8 %conv13, i8* %11, align 1
%11 = load ptr, ptr %p.addr, align 8
%incdec.ptr14 = getelementptr inbounds i8, ptr %11, i32 1
store ptr %incdec.ptr14, ptr %p.addr, align 8
store i8 %conv13, ptr %11, align 1
br label %if.end

if.end: ; preds = %if.else9, %if.then3
br label %if.end15

if.end15: ; preds = %if.end, %if.then
%12 = load i8*, i8** %p.addr, align 8
ret i8* %12
%12 = load ptr, ptr %p.addr, align 8
ret ptr %12
}
12 changes: 6 additions & 6 deletions llvm/test/Transforms/GVNHoist/hoist-pr22005.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,19 @@ target triple = "x86_64-unknown-linux-gnu"
; CHECK: sub i64
; CHECK-NOT: sub i64

define i64 @fun(i8* %out, i8* %end) {
%1 = icmp ult i8* %out, %end
define i64 @fun(ptr %out, ptr %end) {
%1 = icmp ult ptr %out, %end
br i1 %1, label %2, label %6

; <label>:2 ; preds = %0
%3 = ptrtoint i8* %end to i64
%4 = ptrtoint i8* %out to i64
%3 = ptrtoint ptr %end to i64
%4 = ptrtoint ptr %out to i64
%5 = sub i64 %3, %4
br label %10

; <label>:6 ; preds = %0
%7 = ptrtoint i8* %out to i64
%8 = ptrtoint i8* %end to i64
%7 = ptrtoint ptr %out to i64
%8 = ptrtoint ptr %end to i64
%9 = sub i64 %8, %7
br label %10

Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/GVNHoist/hoist-pr28933.ll
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@

define void @test_it() {
bb2:
store i16 undef, i16* getelementptr inbounds (%rec894.0.1.2.3.12, %rec894.0.1.2.3.12* @a, i16 0, i32 0), align 1
%_tmp61 = load i16, i16* getelementptr inbounds (%rec894.0.1.2.3.12, %rec894.0.1.2.3.12* @a, i16 0, i32 0), align 1
store i16 undef, i16* getelementptr inbounds (%rec894.0.1.2.3.12, %rec894.0.1.2.3.12* @a, i16 0, i32 0), align 1
%_tmp92 = load i16, i16* getelementptr inbounds (%rec894.0.1.2.3.12, %rec894.0.1.2.3.12* @a, i16 0, i32 0), align 1
store i16 undef, ptr @a, align 1
%_tmp61 = load i16, ptr @a, align 1
store i16 undef, ptr @a, align 1
%_tmp92 = load i16, ptr @a, align 1
ret void
}
14 changes: 7 additions & 7 deletions llvm/test/Transforms/GVNHoist/hoist-pr46874.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@input = local_unnamed_addr global i32* null, align 8
@input = local_unnamed_addr global ptr null, align 8

; Check that the load instruction is **not** hoisted
; CHECK-LABEL: @_Z3fooPii
Expand All @@ -12,13 +12,13 @@ target triple = "x86_64-unknown-linux-gnu"
; CHECK: load
; CHECK-LABEL: @main

define i32 @_Z3fooPii(i32* %p, i32 %x) local_unnamed_addr {
define i32 @_Z3fooPii(ptr %p, i32 %x) local_unnamed_addr {
entry:
%cmp.not = icmp eq i32* %p, null
%cmp.not = icmp eq ptr %p, null
br i1 %cmp.not, label %if.end3, label %if.then

if.then: ; preds = %entry
%0 = load i32, i32* %p, align 4, !tbaa !3
%0 = load i32, ptr %p, align 4, !tbaa !3
%add = add nsw i32 %0, %x
%cmp1 = icmp eq i32 %add, 4
br i1 %cmp1, label %if2, label %if.end3
Expand All @@ -31,7 +31,7 @@ if.end3: ; preds = %entry, %if.then
if2: ; preds = %if.end3, %if.then
%x.addr.1 = phi i32 [ 4, %if.then ], [ %x.addr.0, %if.end3 ]
%y.0 = phi i32 [ 2, %if.then ], [ %add4, %if.end3 ]
%1 = load i32, i32* %p, align 4, !tbaa !3
%1 = load i32, ptr %p, align 4, !tbaa !3
%add7 = add nsw i32 %x.addr.1, %1
%cmp8 = icmp eq i32 %add7, 5
br i1 %cmp8, label %end, label %if.end11
Expand All @@ -51,8 +51,8 @@ end: ; preds = %if2, %if.end11

define i32 @main() local_unnamed_addr {
entry:
%0 = load i32*, i32** @input, align 8, !tbaa !7
%call = call i32 @_Z3fooPii(i32* %0, i32 0)
%0 = load ptr, ptr @input, align 8, !tbaa !7
%call = call i32 @_Z3fooPii(ptr %0, i32 0)
ret i32 %call
}

Expand Down
11 changes: 4 additions & 7 deletions llvm/test/Transforms/GVNHoist/hoist-simplify-phi.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@
; in non-trivial cases.

; CHECK: if.else218:
; CHECK-NEXT: %0 = getelementptr inbounds %s, %s* undef, i32 0, i32 0
; CHECK-NEXT: %1 = load i32, i32* %0, align 4
; CHECK-NEXT: %0 = load i32, ptr undef, align 4

target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"

%s = type { i32, %s**, [3 x i8], i8 }
%s = type { i32, ptr, [3 x i8], i8 }

define void @test() {
entry:
Expand Down Expand Up @@ -40,13 +39,11 @@ if.else218: ; preds = %while.end
br i1 undef, label %if.then226, label %if.else326

if.then226: ; preds = %if.else218
%size227 = getelementptr inbounds %s, %s* undef, i32 0, i32 0
%0 = load i32, i32* %size227, align 4
%0 = load i32, ptr undef, align 4
unreachable

if.else326: ; preds = %if.else218
%size330 = getelementptr inbounds %s, %s* undef, i32 0, i32 0
%1 = load i32, i32* %size330, align 4
%1 = load i32, ptr undef, align 4
unreachable

cleanup: ; preds = %while.end, %cond.end118
Expand Down
10 changes: 5 additions & 5 deletions llvm/test/Transforms/GVNHoist/hoist-unsafe-pr31729.ll
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ entry:
; Function Attrs:
define i32 @main() {
entry:
%0 = load volatile i32, i32* @g_x_s, align 4
%1 = load volatile i32, i32* @g_z_s, align 4
%2 = load volatile i32, i32* @g_x_u, align 4
%3 = load volatile i32, i32* @g_z_u, align 4
%4 = load volatile i32, i32* @g_m, align 4
%0 = load volatile i32, ptr @g_x_s, align 4
%1 = load volatile i32, ptr @g_z_s, align 4
%2 = load volatile i32, ptr @g_x_u, align 4
%3 = load volatile i32, ptr @g_z_u, align 4
%4 = load volatile i32, ptr @g_m, align 4
%call = call i64 @func() #4
%conv = sext i32 %1 to i64
%cmp = icmp ne i64 %call, %conv
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/Transforms/GVNHoist/hoist-very-busy.ll
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,19 @@ entry:
]

sw0:
store i32 1, i32* @G
store i32 1, ptr @G
br label %exit

sw1:
store i32 1, i32* @G
store i32 1, ptr @G
br label %exit

exit:
call void @longjmp(%struct.__jmp_buf_tag* @test_exit_buf, i32 1) #0
call void @longjmp(ptr @test_exit_buf, i32 1) #0
unreachable
}

declare void @longjmp(%struct.__jmp_buf_tag*, i32) #0
declare void @longjmp(ptr, i32) #0

attributes #0 = { noreturn nounwind }

Expand All @@ -46,10 +46,10 @@ if.then: ; preds = %entry
br i1 undef, label %sw0, label %sw1

sw0:
store i32 1, i32* @G
store i32 1, ptr @G
unreachable

sw1:
store i32 1, i32* @G
store i32 1, ptr @G
ret void
}
32 changes: 16 additions & 16 deletions llvm/test/Transforms/GVNHoist/ld_hoist1.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc_linux"

; Function Attrs: nounwind uwtable
define float* @foo(i32* noalias nocapture readonly %in, float* noalias %out, i32 %size, i32* nocapture readonly %trigger) {
define ptr @foo(ptr noalias nocapture readonly %in, ptr noalias %out, i32 %size, ptr nocapture readonly %trigger) {
entry:
%cmp11 = icmp eq i32 %size, 0
br i1 %cmp11, label %for.end, label %for.body.lr.ph
Expand All @@ -15,38 +15,38 @@ for.body.lr.ph: ; preds = %entry

; CHECK-LABEL: for.body
; CHECK: load
; CHECK: %2 = getelementptr inbounds i32, i32* %in, i64 %indvars.iv
; CHECK: %3 = load i32, i32* %2, align 4
; CHECK: %2 = getelementptr inbounds i32, ptr %in, i64 %indvars.iv
; CHECK: %3 = load i32, ptr %2, align 4

for.body: ; preds = %for.body.lr.ph, %for.inc
%indvars.iv = phi i64 [ 0, %for.body.lr.ph ], [ %indvars.iv.next, %for.inc ]
%arrayidx = getelementptr inbounds i32, i32* %trigger, i64 %indvars.iv
%1 = load i32, i32* %arrayidx, align 4
%arrayidx = getelementptr inbounds i32, ptr %trigger, i64 %indvars.iv
%1 = load i32, ptr %arrayidx, align 4
%cmp1 = icmp sgt i32 %1, 0
br i1 %cmp1, label %if.then, label %if.else

; CHECK-LABEL: if.then
if.then: ; preds = %for.body
; This load should be hoisted
%arrayidx3 = getelementptr inbounds i32, i32* %in, i64 %indvars.iv
%2 = load i32, i32* %arrayidx3, align 4
%arrayidx3 = getelementptr inbounds i32, ptr %in, i64 %indvars.iv
%2 = load i32, ptr %arrayidx3, align 4
%conv = sitofp i32 %2 to float
%add = fadd float %conv, 5.000000e-01
%arrayidx5 = getelementptr inbounds float, float* %out, i64 %indvars.iv
store float %add, float* %arrayidx5, align 4
%arrayidx5 = getelementptr inbounds float, ptr %out, i64 %indvars.iv
store float %add, ptr %arrayidx5, align 4
br label %for.inc

if.else: ; preds = %for.body
%arrayidx7 = getelementptr inbounds float, float* %out, i64 %indvars.iv
%3 = load float, float* %arrayidx7, align 4
%arrayidx7 = getelementptr inbounds float, ptr %out, i64 %indvars.iv
%3 = load float, ptr %arrayidx7, align 4
%div = fdiv float %3, 3.000000e+00
store float %div, float* %arrayidx7, align 4
store float %div, ptr %arrayidx7, align 4
; This load should be hoisted in spite of store
%arrayidx9 = getelementptr inbounds i32, i32* %in, i64 %indvars.iv
%4 = load i32, i32* %arrayidx9, align 4
%arrayidx9 = getelementptr inbounds i32, ptr %in, i64 %indvars.iv
%4 = load i32, ptr %arrayidx9, align 4
%conv10 = sitofp i32 %4 to float
%add13 = fadd float %div, %conv10
store float %add13, float* %arrayidx7, align 4
store float %add13, ptr %arrayidx7, align 4
br label %for.inc

for.inc: ; preds = %if.then, %if.else
Expand All @@ -59,6 +59,6 @@ for.cond.for.end_crit_edge: ; preds = %for.inc
br label %for.end

for.end: ; preds = %entry, %for.cond.for.end_crit_edge
ret float* %out
ret ptr %out
}

74 changes: 36 additions & 38 deletions llvm/test/Transforms/GVNHoist/ld_hoist_st_sink.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
; RUN: opt -passes=gvn-hoist -S < %s | FileCheck %s
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"

%struct.node = type { i64, %struct.node*, %struct.node*, %struct.node*, i64, %struct.arc*, i64, i64, i64 }
%struct.node = type { i64, ptr, ptr, ptr, i64, ptr, i64, i64, i64 }
%struct.arc = type { i64, i64, i64 }

define i64 @foo(%struct.node* nocapture readonly %r) nounwind {
define i64 @foo(ptr nocapture readonly %r) nounwind {
entry:
%node.0.in16 = getelementptr inbounds %struct.node, %struct.node* %r, i64 0, i32 2
%node.017 = load %struct.node*, %struct.node** %node.0.in16, align 8
%tobool18 = icmp eq %struct.node* %node.017, null
%node.0.in16 = getelementptr inbounds %struct.node, ptr %r, i64 0, i32 2
%node.017 = load ptr, ptr %node.0.in16, align 8
%tobool18 = icmp eq ptr %node.017, null
br i1 %tobool18, label %while.end, label %while.body.preheader

; CHECK-LABEL: while.body.preheader
Expand All @@ -19,59 +19,57 @@ while.body.preheader: ; preds = %entry
br label %while.body

while.body: ; preds = %while.body.preheader, %if.end
%node.020 = phi %struct.node* [ %node.0, %if.end ], [ %node.017, %while.body.preheader ]
%node.020 = phi ptr [ %node.0, %if.end ], [ %node.017, %while.body.preheader ]
%sum.019 = phi i64 [ %inc, %if.end ], [ 0, %while.body.preheader ]
%orientation = getelementptr inbounds %struct.node, %struct.node* %node.020, i64 0, i32 4
%0 = load i64, i64* %orientation, align 8
%orientation = getelementptr inbounds %struct.node, ptr %node.020, i64 0, i32 4
%0 = load i64, ptr %orientation, align 8
%cmp = icmp eq i64 %0, 1
br i1 %cmp, label %if.then, label %if.else
; CHECK: if.then
if.then: ; preds = %while.body
%a = getelementptr inbounds %struct.node, %struct.node* %node.020, i64 0, i32 5
%a = getelementptr inbounds %struct.node, ptr %node.020, i64 0, i32 5
; CHECK-NOT: load %struct.arc
%1 = load %struct.arc*, %struct.arc** %a, align 8
%cost = getelementptr inbounds %struct.arc, %struct.arc* %1, i64 0, i32 0
; CHECK-NOT: load i64, i64*
%2 = load i64, i64* %cost, align 8
%pred = getelementptr inbounds %struct.node, %struct.node* %node.020, i64 0, i32 1
; CHECK-NOT: load %struct.node*, %struct.node**
%3 = load %struct.node*, %struct.node** %pred, align 8
%p = getelementptr inbounds %struct.node, %struct.node* %3, i64 0, i32 6
; CHECK-NOT: load i64, i64*
%4 = load i64, i64* %p, align 8
%1 = load ptr, ptr %a, align 8
; CHECK-NOT: load i64, ptr
%2 = load i64, ptr %1, align 8
%pred = getelementptr inbounds %struct.node, ptr %node.020, i64 0, i32 1
; CHECK-NOT: load ptr, ptr
%3 = load ptr, ptr %pred, align 8
%p = getelementptr inbounds %struct.node, ptr %3, i64 0, i32 6
; CHECK-NOT: load i64, ptr
%4 = load i64, ptr %p, align 8
%add = add nsw i64 %4, %2
%p1 = getelementptr inbounds %struct.node, %struct.node* %node.020, i64 0, i32 6
%p1 = getelementptr inbounds %struct.node, ptr %node.020, i64 0, i32 6
; FIXME: store i64
store i64 %add, i64* %p1, align 8
store i64 %add, ptr %p1, align 8
br label %if.end

; CHECK: if.else
if.else: ; preds = %while.body
%pred2 = getelementptr inbounds %struct.node, %struct.node* %node.020, i64 0, i32 1
; CHECK-NOT: load %struct.node*, %struct.node**
%5 = load %struct.node*, %struct.node** %pred2, align 8
%p3 = getelementptr inbounds %struct.node, %struct.node* %5, i64 0, i32 6
; CHECK-NOT: load i64, i64*
%6 = load i64, i64* %p3, align 8
%a4 = getelementptr inbounds %struct.node, %struct.node* %node.020, i64 0, i32 5
; CHECK-NOT: load %struct.arc*, %struct.arc**
%7 = load %struct.arc*, %struct.arc** %a4, align 8
%cost5 = getelementptr inbounds %struct.arc, %struct.arc* %7, i64 0, i32 0
; CHECK-NOT: load i64, i64*
%8 = load i64, i64* %cost5, align 8
%pred2 = getelementptr inbounds %struct.node, ptr %node.020, i64 0, i32 1
; CHECK-NOT: load ptr, ptr
%5 = load ptr, ptr %pred2, align 8
%p3 = getelementptr inbounds %struct.node, ptr %5, i64 0, i32 6
; CHECK-NOT: load i64, ptr
%6 = load i64, ptr %p3, align 8
%a4 = getelementptr inbounds %struct.node, ptr %node.020, i64 0, i32 5
; CHECK-NOT: load ptr, ptr
%7 = load ptr, ptr %a4, align 8
; CHECK-NOT: load i64, ptr
%8 = load i64, ptr %7, align 8
%sub = sub nsw i64 %6, %8
%p6 = getelementptr inbounds %struct.node, %struct.node* %node.020, i64 0, i32 6
%p6 = getelementptr inbounds %struct.node, ptr %node.020, i64 0, i32 6
; FIXME: store i64
store i64 %sub, i64* %p6, align 8
store i64 %sub, ptr %p6, align 8
br label %if.end

; CHECK: if.end
if.end: ; preds = %if.else, %if.then
; FIXME: store
%inc = add nsw i64 %sum.019, 1
%node.0.in = getelementptr inbounds %struct.node, %struct.node* %node.020, i64 0, i32 2
%node.0 = load %struct.node*, %struct.node** %node.0.in, align 8
%tobool = icmp eq %struct.node* %node.0, null
%node.0.in = getelementptr inbounds %struct.node, ptr %node.020, i64 0, i32 2
%node.0 = load ptr, ptr %node.0.in, align 8
%tobool = icmp eq ptr %node.0, null
br i1 %tobool, label %while.end.loopexit, label %while.body

while.end.loopexit: ; preds = %if.end
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/GVNHoist/non-trivial-phi.ll
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"

define void @f(i8* %p) {
define void @f(ptr %p) {
entry:
switch i4 undef, label %if.then30 [
i4 4, label %if.end
Expand All @@ -19,15 +19,15 @@ if.end19:
br i1 undef, label %e, label %e.thread

e.thread:
store i8 0, i8* %p, align 4
store i8 0, ptr %p, align 4
br label %if.then30

if.then30:
call void @g()
unreachable

e:
store i8 0, i8* %p, align 4
store i8 0, ptr %p, align 4
unreachable
}

Expand Down
15 changes: 6 additions & 9 deletions llvm/test/Transforms/GVNHoist/pr28626.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @test1(i1 %a, i1** %d) {
define void @test1(i1 %a, ptr %d) {
entry:
%0 = load i1*, i1** %d, align 8
%0 = load ptr, ptr %d, align 8
br i1 %a, label %if.then, label %if.else

if.then: ; preds = %entry
Expand All @@ -18,25 +18,22 @@ if.end: ; preds = %if.else, %if.then
br i1 %c.0, label %if.then2, label %if.else3

if.then2: ; preds = %if.end
%rc = getelementptr inbounds i1, i1* %0, i64 0
store i1 %c.0, i1* %rc, align 4
store i1 %c.0, ptr %0, align 4
br label %if.end6

if.else3: ; preds = %if.end
%rc5 = getelementptr inbounds i1, i1* %0, i64 0
store i1 %c.0, i1* %rc5, align 4
store i1 %c.0, ptr %0, align 4
br label %if.end6

if.end6: ; preds = %if.else3, %if.then2
ret void
}

; CHECK-LABEL: define void @test1(
; CHECK: %[[load:.*]] = load i1*, i1** %d, align 8
; CHECK: %[[load:.*]] = load ptr, ptr %d, align 8
; CHECK: %[[phi:.*]] = phi i1 [ true, {{.*}} ], [ false, {{.*}} ]

; CHECK: %[[gep0:.*]] = getelementptr inbounds i1, i1* %[[load]], i64 0
; CHECK: store i1 %[[phi]], i1* %[[gep0]], align 4
; CHECK: store i1 %[[phi]], ptr %[[load]], align 4

; Check that store instructions are hoisted.
; CHECK-NOT: store
12 changes: 6 additions & 6 deletions llvm/test/Transforms/GVNHoist/pr29031.ll
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ entry:
br label %for.cond

for.cond: ; preds = %for.inc5, %entry
%0 = load i32, i32* @a, align 4
%0 = load i32, ptr @a, align 4
%cmp = icmp slt i32 %0, 1
br i1 %cmp, label %for.cond1, label %for.end7

for.cond1: ; preds = %for.cond, %for.inc
%1 = load i32, i32* @a, align 4
%1 = load i32, ptr @a, align 4
%cmp2 = icmp slt i32 %1, 1
br i1 %cmp2, label %for.body3, label %for.inc5

Expand All @@ -31,18 +31,18 @@ for.body3: ; preds = %for.cond1

if.then: ; preds = %for.body3
%inc = add nsw i32 %1, 1
store i32 %inc, i32* @a, align 4
store i32 %inc, ptr @a, align 4
br label %for.inc

for.inc: ; preds = %for.body3, %if.then
%2 = load i32, i32* @a, align 4
%2 = load i32, ptr @a, align 4
%inc4 = add nsw i32 %2, 1
store i32 %inc4, i32* @a, align 4
store i32 %inc4, ptr @a, align 4
br label %for.cond1

for.inc5: ; preds = %for.cond1
%inc6 = add nsw i32 %1, 1
store i32 %inc6, i32* @a, align 4
store i32 %inc6, ptr @a, align 4
br label %for.cond

for.end7: ; preds = %for.cond
Expand Down
100 changes: 48 additions & 52 deletions llvm/test/Transforms/GVNHoist/pr29034.ll
Original file line number Diff line number Diff line change
Expand Up @@ -10,49 +10,47 @@
; CHECK: store


%struct._MUSIC_OP_API_ = type { %struct._FILE_OPERATE_*, %struct.__MUSIC_API* }
%struct._FILE_OPERATE_ = type { %struct._FILE_OPERATE_INIT_*, %struct._lg_dev_info_* }
%struct._FILE_OPERATE_INIT_ = type { i32, i32, i32, i32, i32*, i8*, i32 }
%struct._lg_dev_info_ = type { %struct.os_event, i32, i32, %struct._lg_dev_hdl_*, i8, i8, i8, i8, i8 }
%struct.os_event = type { i8, i32, i8*, %union.anon }
%struct._MUSIC_OP_API_ = type { ptr, ptr }
%struct._FILE_OPERATE_ = type { ptr, ptr }
%struct._FILE_OPERATE_INIT_ = type { i32, i32, i32, i32, ptr, ptr, i32 }
%struct._lg_dev_info_ = type { %struct.os_event, i32, i32, ptr, i8, i8, i8, i8, i8 }
%struct.os_event = type { i8, i32, ptr, %union.anon }
%union.anon = type { %struct.event_cnt }
%struct.event_cnt = type { i16 }
%struct._lg_dev_hdl_ = type { i8*, i8*, i8*, i8*, i8* }
%struct.__MUSIC_API = type <{ i8*, i8*, i32, %struct._DEC_API, %struct._DEC_API_IO*, %struct._FS_BRK_POINT* }>
%struct._DEC_API = type { %struct._DEC_PHY*, i8*, i8*, i8* (i8*)*, i32* (i8*)*, i8*, %struct._AAC_DEFAULT_SETTING, i32, i32, i8*, %struct.decoder_inf*, i32, i8, i8*, i8, i8* }
%struct._DEC_PHY = type { i8*, %struct.__audio_decoder_ops*, i8*, %struct.if_decoder_io, %struct.if_dec_file*, i8*, i32 (i8*)*, i32, i8, %struct.__FF_FR }
%struct.__audio_decoder_ops = type { i8*, i32 (i8*, %struct.if_decoder_io*, i8*)*, i32 (i8*)*, i32 (i8*, i32)*, %struct.decoder_inf* (i8*)*, i32 (i8*)*, i32 (i8*)*, i32 (...)*, i32 (...)*, i32 (...)*, void (i8*, i32)*, void (i8*, i32, i8*, i32)*, i32 (i8*, i32, i8*)* }
%struct.if_decoder_io = type { i8*, i32 (i8*, i32, i8*, i32, i8)*, i32 (i8*, i32, i8*)*, void (i8*, i8*, i32)*, i32 (i8*)*, i32 (i8*, i32, i32)* }
%struct.if_dec_file = type { i32 (i8*, i8*, i32)*, i32 (i8*, i32, i32)* }
%struct._lg_dev_hdl_ = type { ptr, ptr, ptr, ptr, ptr }
%struct.__MUSIC_API = type <{ ptr, ptr, i32, %struct._DEC_API, ptr, ptr }>
%struct._DEC_API = type { ptr, ptr, ptr, ptr, ptr, ptr, %struct._AAC_DEFAULT_SETTING, i32, i32, ptr, ptr, i32, i8, ptr, i8, ptr }
%struct._DEC_PHY = type { ptr, ptr, ptr, %struct.if_decoder_io, ptr, ptr, ptr, i32, i8, %struct.__FF_FR }
%struct.__audio_decoder_ops = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.if_decoder_io = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.if_dec_file = type { ptr, ptr }
%struct.__FF_FR = type { i32, i32, i8, i8, i8 }
%struct._AAC_DEFAULT_SETTING = type { i32, i32, i32 }
%struct.decoder_inf = type { i16, i16, i32, i32 }
%struct._DEC_API_IO = type { i8*, i8*, i16 (i8*, i8*, i16)*, i32 (i8*, i8, i32)*, i32 (%struct.decoder_inf*, i32)*, %struct.__OP_IO, i32, i32 }
%struct.__OP_IO = type { i8*, i8* (i8*, i8*, i32)* }
%struct._DEC_API_IO = type { ptr, ptr, ptr, ptr, ptr, %struct.__OP_IO, i32, i32 }
%struct.__OP_IO = type { ptr, ptr }
%struct._FS_BRK_POINT = type { %struct._FS_BRK_INFO, i32, i32 }
%struct._FS_BRK_INFO = type { i32, i32, [8 x i8], i8, i8, i16 }

@.str = external hidden unnamed_addr constant [10 x i8], align 1

define void @music_task(i8* nocapture readnone %p) local_unnamed_addr {
define void @music_task(ptr nocapture readnone %p) local_unnamed_addr {
entry:
%mapi = alloca %struct._MUSIC_OP_API_*, align 8
%0 = bitcast %struct._MUSIC_OP_API_** %mapi to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* %0)
store %struct._MUSIC_OP_API_* null, %struct._MUSIC_OP_API_** %mapi, align 8, !tbaa !1
%call = call i32 @music_decoder_init(%struct._MUSIC_OP_API_** nonnull %mapi)
%mapi = alloca ptr, align 8
call void @llvm.lifetime.start.p0(i64 8, ptr %mapi)
store ptr null, ptr %mapi, align 8, !tbaa !1
%call = call i32 @music_decoder_init(ptr nonnull %mapi)
br label %while.cond

while.cond.loopexit: ; preds = %while.cond2
br label %while.cond

while.cond: ; preds = %while.cond.loopexit, %entry
%1 = load %struct._MUSIC_OP_API_*, %struct._MUSIC_OP_API_** %mapi, align 8, !tbaa !1
%dop_api = getelementptr inbounds %struct._MUSIC_OP_API_, %struct._MUSIC_OP_API_* %1, i64 0, i32 1
%2 = load %struct.__MUSIC_API*, %struct.__MUSIC_API** %dop_api, align 8, !tbaa !5
%file_num = getelementptr inbounds %struct.__MUSIC_API, %struct.__MUSIC_API* %2, i64 0, i32 2
%3 = bitcast i32* %file_num to i8*
%call1 = call i32 @music_play_api(%struct._MUSIC_OP_API_* %1, i32 33, i32 0, i32 28, i8* %3)
%0 = load ptr, ptr %mapi, align 8, !tbaa !1
%dop_api = getelementptr inbounds %struct._MUSIC_OP_API_, ptr %0, i64 0, i32 1
%1 = load ptr, ptr %dop_api, align 8, !tbaa !5
%file_num = getelementptr inbounds %struct.__MUSIC_API, ptr %1, i64 0, i32 2
%call1 = call i32 @music_play_api(ptr %0, i32 33, i32 0, i32 28, ptr %file_num)
br label %while.cond2

while.cond2: ; preds = %while.cond2.backedge, %while.cond
Expand All @@ -65,48 +63,46 @@ while.cond2: ; preds = %while.cond2.backedg
]

sw.bb: ; preds = %while.cond2
%4 = load %struct._MUSIC_OP_API_*, %struct._MUSIC_OP_API_** %mapi, align 8, !tbaa !1
%dop_api4 = getelementptr inbounds %struct._MUSIC_OP_API_, %struct._MUSIC_OP_API_* %4, i64 0, i32 1
%5 = load %struct.__MUSIC_API*, %struct.__MUSIC_API** %dop_api4, align 8, !tbaa !5
%file_num5 = getelementptr inbounds %struct.__MUSIC_API, %struct.__MUSIC_API* %5, i64 0, i32 2
%6 = load i32, i32* %file_num5, align 1, !tbaa !7
%call6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i32 %6)
%2 = load ptr, ptr %mapi, align 8, !tbaa !1
%dop_api4 = getelementptr inbounds %struct._MUSIC_OP_API_, ptr %2, i64 0, i32 1
%3 = load ptr, ptr %dop_api4, align 8, !tbaa !5
%file_num5 = getelementptr inbounds %struct.__MUSIC_API, ptr %3, i64 0, i32 2
%4 = load i32, ptr %file_num5, align 1, !tbaa !7
%call6 = call i32 (ptr, ...) @printf(ptr @.str, i32 %4)
br label %while.cond2.backedge

sw.bb7: ; preds = %while.cond2
%7 = load %struct._MUSIC_OP_API_*, %struct._MUSIC_OP_API_** %mapi, align 8, !tbaa !1
%dop_api8 = getelementptr inbounds %struct._MUSIC_OP_API_, %struct._MUSIC_OP_API_* %7, i64 0, i32 1
%8 = load %struct.__MUSIC_API*, %struct.__MUSIC_API** %dop_api8, align 8, !tbaa !5
%file_num9 = getelementptr inbounds %struct.__MUSIC_API, %struct.__MUSIC_API* %8, i64 0, i32 2
store i32 1, i32* %file_num9, align 1, !tbaa !7
%9 = bitcast i32* %file_num9 to i8*
%call12 = call i32 @music_play_api(%struct._MUSIC_OP_API_* %7, i32 34, i32 0, i32 24, i8* %9)
%5 = load ptr, ptr %mapi, align 8, !tbaa !1
%dop_api8 = getelementptr inbounds %struct._MUSIC_OP_API_, ptr %5, i64 0, i32 1
%6 = load ptr, ptr %dop_api8, align 8, !tbaa !5
%file_num9 = getelementptr inbounds %struct.__MUSIC_API, ptr %6, i64 0, i32 2
store i32 1, ptr %file_num9, align 1, !tbaa !7
%call12 = call i32 @music_play_api(ptr %5, i32 34, i32 0, i32 24, ptr %file_num9)
br label %while.cond2.backedge

sw.bb13: ; preds = %while.cond2
%10 = load %struct._MUSIC_OP_API_*, %struct._MUSIC_OP_API_** %mapi, align 8, !tbaa !1
%dop_api14 = getelementptr inbounds %struct._MUSIC_OP_API_, %struct._MUSIC_OP_API_* %10, i64 0, i32 1
%11 = load %struct.__MUSIC_API*, %struct.__MUSIC_API** %dop_api14, align 8, !tbaa !5
%file_num15 = getelementptr inbounds %struct.__MUSIC_API, %struct.__MUSIC_API* %11, i64 0, i32 2
store i32 1, i32* %file_num15, align 1, !tbaa !7
%12 = bitcast i32* %file_num15 to i8*
%call18 = call i32 @music_play_api(%struct._MUSIC_OP_API_* %10, i32 35, i32 0, i32 26, i8* %12)
%7 = load ptr, ptr %mapi, align 8, !tbaa !1
%dop_api14 = getelementptr inbounds %struct._MUSIC_OP_API_, ptr %7, i64 0, i32 1
%8 = load ptr, ptr %dop_api14, align 8, !tbaa !5
%file_num15 = getelementptr inbounds %struct.__MUSIC_API, ptr %8, i64 0, i32 2
store i32 1, ptr %file_num15, align 1, !tbaa !7
%call18 = call i32 @music_play_api(ptr %7, i32 35, i32 0, i32 26, ptr %file_num15)
br label %while.cond2.backedge

sw.default: ; preds = %while.cond2
%13 = load %struct._MUSIC_OP_API_*, %struct._MUSIC_OP_API_** %mapi, align 8, !tbaa !1
%call19 = call i32 @music_play_api(%struct._MUSIC_OP_API_* %13, i32 33, i32 0, i32 22, i8* null)
%9 = load ptr, ptr %mapi, align 8, !tbaa !1
%call19 = call i32 @music_play_api(ptr %9, i32 33, i32 0, i32 22, ptr null)
br label %while.cond2.backedge

while.cond2.backedge: ; preds = %sw.default, %sw.bb13, %sw.bb7, %sw.bb
%err.0.be = phi i32 [ %call19, %sw.default ], [ %call18, %sw.bb13 ], [ %call12, %sw.bb7 ], [ 0, %sw.bb ]
br label %while.cond2
}

declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
declare i32 @music_decoder_init(%struct._MUSIC_OP_API_**)
declare i32 @music_play_api(%struct._MUSIC_OP_API_*, i32, i32, i32, i8*)
declare i32 @printf(i8* nocapture readonly, ...)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare i32 @music_decoder_init(ptr)
declare i32 @music_play_api(ptr, i32, i32, i32, ptr)
declare i32 @printf(ptr nocapture readonly, ...)

!0 = !{!"clang version 4.0.0 "}
!1 = !{!2, !2, i64 0}
Expand Down
36 changes: 18 additions & 18 deletions llvm/test/Transforms/GVNHoist/pr30216.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,32 @@

; Make sure the two stores @B do not get hoisted past the load @B.

; CHECK-LABEL: define i8* @Foo
; CHECK-LABEL: define ptr @Foo
; CHECK: store
; CHECK: store
; CHECK: load
; CHECK: store

@A = external global i8
@B = external global i8*
@B = external global ptr

define i8* @Foo() {
store i8 0, i8* @A
define ptr @Foo() {
store i8 0, ptr @A
br i1 undef, label %if.then, label %if.else

if.then:
store i8* null, i8** @B
ret i8* null
store ptr null, ptr @B
ret ptr null

if.else:
%1 = load i8*, i8** @B
store i8* null, i8** @B
ret i8* %1
%1 = load ptr, ptr @B
store ptr null, ptr @B
ret ptr %1
}

; Make sure the two stores @B do not get hoisted past the store @GlobalVar.

; CHECK-LABEL: define i8* @Fun
; CHECK-LABEL: define ptr @Fun
; CHECK: store
; CHECK: store
; CHECK: store
Expand All @@ -36,17 +36,17 @@ if.else:

@GlobalVar = internal global i8 0

define i8* @Fun() {
store i8 0, i8* @A
define ptr @Fun() {
store i8 0, ptr @A
br i1 undef, label %if.then, label %if.else

if.then:
store i8* null, i8** @B
ret i8* null
store ptr null, ptr @B
ret ptr null

if.else:
store i8 0, i8* @GlobalVar
store i8* null, i8** @B
%1 = load i8*, i8** @B
ret i8* %1
store i8 0, ptr @GlobalVar
store ptr null, ptr @B
%1 = load ptr, ptr @B
ret ptr %1
}
14 changes: 7 additions & 7 deletions llvm/test/Transforms/GVNHoist/pr30499.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@

define void @_Z3fn2v() #0 {
entry:
%a = alloca i8*, align 8
%a = alloca ptr, align 8
%b = alloca i32, align 4
%0 = load i8*, i8** %a, align 8
store i8 0, i8* %0, align 1
%1 = load i32, i32* %b, align 4
%0 = load ptr, ptr %a, align 8
store i8 0, ptr %0, align 1
%1 = load i32, ptr %b, align 4
%tobool = icmp ne i32 %1, 0
br i1 %tobool, label %if.then, label %if.end

if.then: ; preds = %entry
%call = call i64 @_Z3fn1v() #2
%conv = trunc i64 %call to i32
store i32 %conv, i32* %b, align 4
store i32 %conv, ptr %b, align 4
br label %if.end

if.end: ; preds = %if.then, %entry
%2 = load i8*, i8** %a, align 8
store i8 0, i8* %2, align 1
%2 = load ptr, ptr %a, align 8
store i8 0, ptr %2, align 1
ret void
}

Expand Down
16 changes: 8 additions & 8 deletions llvm/test/Transforms/GVNHoist/pr35222-hoist-load.ll
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ entry:
br label %do.body

do.body: ; preds = %do.body, %entry
%tmp9 = load i32, i32* @heap, align 4
%tmp9 = load i32, ptr @heap, align 4
%cmp = call i1 @pqdownheap(i32 %tmp9)
br i1 %cmp, label %do.body, label %do.end

do.end: ; preds = %do.body
%tmp20 = load i32, i32* @heap, align 4
%tmp20 = load i32, ptr @heap, align 4
ret i32 %tmp20
}

Expand All @@ -40,29 +40,29 @@ entry:
br label %for.cond

for.cond:
%a3 = load volatile i1, i1* @v
%a3 = load volatile i1, ptr @v
br i1 %a3, label %for.body, label %while.end

for.body:
br label %if.then

if.then:
%tmp4 = load i32, i32* @i, align 4
%tmp4 = load i32, ptr @i, align 4
br label %for.cond

while.end:
br label %do.body

do.body:
%tmp9 = load i32, i32* getelementptr inbounds ([573 x i32], [573 x i32]* @j,
%tmp9 = load i32, ptr getelementptr inbounds ([573 x i32], ptr @j,
i32 0, i32 1), align 4
%tmp10 = load i32, i32* @i, align 4
%tmp10 = load i32, ptr @i, align 4
call void @fn()
%a1 = load volatile i1, i1* @v
%a1 = load volatile i1, ptr @v
br i1 %a1, label %do.body, label %do.end

do.end:
%tmp20 = load i32, i32* getelementptr inbounds ([573 x i32], [573 x i32]* @j,
%tmp20 = load i32, ptr getelementptr inbounds ([573 x i32], ptr @j,
i32 0, i32 1), align 4
ret i32 %tmp20
}
Expand Down
32 changes: 16 additions & 16 deletions llvm/test/Transforms/GVNHoist/pr36787.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
; RUN: opt < %s -passes=gvn-hoist -S | FileCheck %s

@g = external constant i8*
@g = external constant ptr

declare i32 @gxx_personality(...)
declare void @f0()
Expand All @@ -12,35 +12,35 @@ declare void @f2()

;CHECK-LABEL: @func

define void @func() personality i8* bitcast (i32 (...)* @gxx_personality to i8*) {
define void @func() personality ptr @gxx_personality {
invoke void @f0()
to label %3 unwind label %1

1:
%2 = landingpad { i8*, i32 }
catch i8* bitcast (i8** @g to i8*)
catch i8* null
%2 = landingpad { ptr, i32 }
catch ptr @g
catch ptr null
br label %16

3:
br i1 undef, label %4, label %10

;CHECK: 4:
;CHECK-NEXT: %5 = load i32*, i32** undef, align 8
;CHECK-NEXT: %5 = load ptr, ptr undef, align 8
;CHECK-NEXT: invoke void @f1()

4:
%5 = load i32*, i32** undef, align 8
%5 = load ptr, ptr undef, align 8
invoke void @f1()
to label %6 unwind label %1

;CHECK: 6:
;CHECK-NEXT: %7 = load i32*, i32** undef, align 8
;CHECK-NEXT: %8 = load i32*, i32** undef, align 8
;CHECK-NEXT: %7 = load ptr, ptr undef, align 8
;CHECK-NEXT: %8 = load ptr, ptr undef, align 8

6:
%7 = load i32*, i32** undef, align 8
%8 = load i32*, i32** undef, align 8
%7 = load ptr, ptr undef, align 8
%8 = load ptr, ptr undef, align 8
br i1 true, label %9, label %17

9:
Expand All @@ -52,16 +52,16 @@ define void @func() personality i8* bitcast (i32 (...)* @gxx_personality to i8*)
to label %11 unwind label %1

11:
%12 = invoke signext i32 undef(i32* null, i32 signext undef, i1 zeroext undef)
%12 = invoke signext i32 undef(ptr null, i32 signext undef, i1 zeroext undef)
to label %13 unwind label %14

13:
unreachable

14:
%15 = landingpad { i8*, i32 }
catch i8* bitcast (i8** @g to i8*)
catch i8* null
%15 = landingpad { ptr, i32 }
catch ptr @g
catch ptr null
br label %16

16:
Expand All @@ -71,6 +71,6 @@ define void @func() personality i8* bitcast (i32 (...)* @gxx_personality to i8*)
ret void

; uselistorder directives
uselistorder void ()* @f0, { 1, 0 }
uselistorder ptr @f0, { 1, 0 }
uselistorder label %1, { 0, 3, 1, 2 }
}
34 changes: 17 additions & 17 deletions llvm/test/Transforms/GVNHoist/pr37445.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
; FIXME: Hoist loads from bb58 and bb45 to bb41.

@g_10 = external global i32, align 4
@g_536 = external global i8*, align 8
@g_1629 = external global i32**, align 8
@g_963 = external global i32**, align 8
@g_1276 = external global i32**, align 8
@g_536 = external global ptr, align 8
@g_1629 = external global ptr, align 8
@g_963 = external global ptr, align 8
@g_1276 = external global ptr, align 8

;CHECK-LABEL: @func_22

define void @func_22(i32* %arg, i32* %arg1) {
define void @func_22(ptr %arg, ptr %arg1) {
bb:
br label %bb12

Expand All @@ -28,10 +28,10 @@ bb12:

bb15:
%tmp183 = trunc i16 0 to i8
%tmp20 = load i8*, i8** @g_536, align 8
%tmp21 = load i8, i8* %tmp20, align 1
%tmp20 = load ptr, ptr @g_536, align 8
%tmp21 = load i8, ptr %tmp20, align 1
%tmp23 = or i8 %tmp21, %tmp183
store i8 %tmp23, i8* %tmp20, align 1
store i8 %tmp23, ptr %tmp20, align 1
%tmp5.i = icmp eq i8 %tmp23, 0
br i1 %tmp5.i, label %safe_div_func_uint8_t_u_u.exit, label %bb8.i

Expand All @@ -54,21 +54,21 @@ bb36:
;CHECK: bb41:

bb41:
%tmp43 = load i32, i32* %arg, align 4
%tmp43 = load i32, ptr %arg, align 4
%tmp44 = icmp eq i32 %tmp43, 0
br i1 %tmp44, label %bb52, label %bb45

;CHECK: bb45:
;CHECK: %tmp47 = load i32, i32* %arg1, align 4
;CHECK: %tmp47 = load i32, ptr %arg1, align 4
;CHECK: %tmp48 = icmp eq i32 %tmp47, 0

bb45:
%tmp47 = load i32, i32* %arg1, align 4
%tmp47 = load i32, ptr %arg1, align 4
%tmp48 = icmp eq i32 %tmp47, 0
br i1 %tmp48, label %bb50, label %bb64

bb50:
%tmp51 = load volatile i32**, i32*** @g_963, align 8
%tmp51 = load volatile ptr, ptr @g_963, align 8
unreachable

bb52:
Expand All @@ -81,29 +81,29 @@ bb55:
br label %bb52

;CHECK: bb58:
;CHECK: %tmp60 = load i32, i32* %arg1, align 4
;CHECK: %tmp60 = load i32, ptr %arg1, align 4
;CHECK: %tmp61 = icmp eq i32 %tmp60, 0
;CHECK: bb62:
;CHECK: load
;CHECK: bb64:
;CHECK: load

bb58:
%tmp60 = load i32, i32* %arg1, align 4
%tmp60 = load i32, ptr %arg1, align 4
%tmp61 = icmp eq i32 %tmp60, 0
br i1 %tmp61, label %bb62, label %bb64

bb62:
%tmp63 = load volatile i32**, i32*** @g_1276, align 8
%tmp63 = load volatile ptr, ptr @g_1276, align 8
unreachable

bb64:
%tmp65 = load volatile i32**, i32*** @g_1629, align 8
%tmp65 = load volatile ptr, ptr @g_1629, align 8
unreachable

; uselistorder directives
uselistorder i32 %spec.select, { 1, 0 }
uselistorder i32* %arg1, { 1, 0 }
uselistorder ptr %arg1, { 1, 0 }
uselistorder label %bb64, { 1, 0 }
uselistorder label %bb52, { 1, 0 }
uselistorder label %bb41, { 1, 0 }
Expand Down
10 changes: 5 additions & 5 deletions llvm/test/Transforms/GVNHoist/pr37808.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
define void @func() {
; CHECK-LABEL: @func()
; CHECK: bb6:
; CHECK: store i64 0, i64* undef, align 8
; CHECK: store i64 0, ptr undef, align 8
; CHECK: bb7:
; CHECK-NOT: store i64 0, i64* undef, align 8
; CHECK-NOT: store i64 0, ptr undef, align 8
; CHECK: bb8:
; CHECK-NOT: store i64 0, i64* undef, align 8
; CHECK-NOT: store i64 0, ptr undef, align 8

entry:
br label %bb1
Expand All @@ -31,10 +31,10 @@ bb6:
br i1 undef, label %bb7, label %bb8

bb7:
store i64 0, i64* undef, align 8
store i64 0, ptr undef, align 8
unreachable

bb8:
store i64 0, i64* undef, align 8
store i64 0, ptr undef, align 8
ret void
}
32 changes: 15 additions & 17 deletions llvm/test/Transforms/GVNHoist/pr38807.ll
Original file line number Diff line number Diff line change
Expand Up @@ -8,42 +8,40 @@

;CHECK-LABEL: @foo

define void @foo(i32* %arg) {
define void @foo(ptr %arg) {
bb0:
%0 = bitcast i32* %arg to %S*
%call.idx.i = getelementptr %S, %S* %0, i64 0, i32 0, i32 0
%call.idx.val.i = load i32, i32* %call.idx.i
%call.idx.val.i = load i32, ptr %arg
br label %bb1

;CHECK: bb1:
;CHECK: %call264 = call zeroext i1 @bar
;CHECK: store i32 %call.idx.val.i, i32* %call.idx.i
;CHECK: %1 = getelementptr inbounds %S, %S* %0, i64 0, i32 0, i32 1
;CHECK: store i64 undef, i64* %1
;CHECK: store i32 %call.idx.val.i, ptr %arg
;CHECK: %0 = getelementptr inbounds %S, ptr %arg, i64 0, i32 0, i32 1
;CHECK: store i64 undef, ptr %0
;CHECK: br i1 %call264, label %bb2, label %bb3

bb1:
%call264 = call zeroext i1 @bar()
br i1 %call264, label %bb2, label %bb3

;CHECK: bb2:
;CHECK-NOT: store i32 %call.idx.val.i, i32* %call.idx.i
;CHECK-NOT: store i64 undef, i64* %{.*}
;CHECK-NOT: store i32 %call.idx.val.i, ptr %arg
;CHECK-NOT: store i64 undef, ptr %{.*}

bb2:
store i32 %call.idx.val.i, i32* %call.idx.i
%1 = getelementptr inbounds %S, %S* %0, i64 0, i32 0, i32 1
store i64 undef, i64* %1
store i32 %call.idx.val.i, ptr %arg
%0 = getelementptr inbounds %S, ptr %arg, i64 0, i32 0, i32 1
store i64 undef, ptr %0
ret void

;CHECK: bb3:
;CHECK-NOT: store i32 %call.idx.val.i, i32* %call.idx.i
;CHECK-NOT: store i64 undef, i64* %{.*}
;CHECK-NOT: store i32 %call.idx.val.i, ptr %arg
;CHECK-NOT: store i64 undef, ptr %{.*}

bb3:
store i32 %call.idx.val.i, i32* %call.idx.i
%2 = getelementptr inbounds %S, %S* %0, i64 0, i32 0, i32 1
store i64 undef, i64* %2
store i32 %call.idx.val.i, ptr %arg
%1 = getelementptr inbounds %S, ptr %arg, i64 0, i32 0, i32 1
store i64 undef, ptr %1
ret void
}

Expand Down
10 changes: 5 additions & 5 deletions llvm/test/Transforms/GVNSink/assumption.ll
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,27 @@ define void @main() {
; CHECK-NEXT: bb:
; CHECK-NEXT: br label [[BB4_I:%.*]]
; CHECK: bb4.i:
; CHECK-NEXT: [[I1_I:%.*]] = load volatile i32, i32* @g, align 4
; CHECK-NEXT: [[I1_I:%.*]] = load volatile i32, ptr @g, align 4
; CHECK-NEXT: [[I32_I:%.*]] = icmp eq i32 [[I1_I]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[I32_I]])
; CHECK-NEXT: [[I1_I_1:%.*]] = load volatile i32, i32* @g, align 4
; CHECK-NEXT: [[I1_I_1:%.*]] = load volatile i32, ptr @g, align 4
; CHECK-NEXT: [[I32_I_1:%.*]] = icmp eq i32 [[I1_I_1]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[I32_I_1]])
; CHECK-NEXT: [[I1_I_2:%.*]] = load volatile i32, i32* @g, align 4
; CHECK-NEXT: [[I1_I_2:%.*]] = load volatile i32, ptr @g, align 4
; CHECK-NEXT: [[I32_I_2:%.*]] = icmp eq i32 [[I1_I_2]], 0
; CHECK-NEXT: call void @llvm.assume(i1 [[I32_I_2]])
; CHECK-NEXT: br label [[BB4_I]], !llvm.loop [[LOOP0:![0-9]+]]
; CHECK: func_1.exit:
; CHECK-NEXT: unreachable
;
bb:
%i1.i = load volatile i32, i32* @g
%i1.i = load volatile i32, ptr @g
%i32.i = icmp eq i32 %i1.i, 0
call void @llvm.assume(i1 %i32.i) #3
br label %bb4.i

bb4.i: ; preds = %bb4.i, %bb
%i.i = load volatile i32, i32* @g
%i.i = load volatile i32, ptr @g
%i3.i = icmp eq i32 %i.i, 0
call void @llvm.assume(i1 %i3.i) #3
br label %bb4.i
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/GVNSink/indirect-call.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare i8 @ext(i1)

define zeroext i1 @test1(i1 zeroext %flag, i32 %blksA, i32 %blksB, i32 %nblks, i8(i1)* %ext) {
define zeroext i1 @test1(i1 zeroext %flag, i32 %blksA, i32 %blksB, i32 %nblks, ptr %ext) {
entry:
%cmp = icmp uge i32 %blksA, %nblks
br i1 %flag, label %if.then, label %if.else
Expand All @@ -24,7 +24,7 @@ if.end:
ret i1 %tobool4
}

define zeroext i1 @test2(i1 zeroext %flag, i32 %blksA, i32 %blksB, i32 %nblks, i8(i1)* %ext) {
define zeroext i1 @test2(i1 zeroext %flag, i32 %blksA, i32 %blksB, i32 %nblks, ptr %ext) {
entry:
%cmp = icmp uge i32 %blksA, %nblks
br i1 %flag, label %if.then, label %if.else
Expand All @@ -46,13 +46,13 @@ if.end:
ret i1 %tobool4
}

define zeroext i1 @test3(i1 zeroext %flag, i32 %blksA, i32 %blksB, i32 %nblks, i8(i1)* %ext1, i8(i1)* %ext2) {
define zeroext i1 @test3(i1 zeroext %flag, i32 %blksA, i32 %blksB, i32 %nblks, ptr %ext1, ptr %ext2) {
entry:
%cmp = icmp uge i32 %blksA, %nblks
br i1 %flag, label %if.then, label %if.else

; CHECK-LABEL: test3
; CHECK: %[[x:.*]] = select i1 %flag, i8 (i1)* %ext1, i8 (i1)* %ext2
; CHECK: %[[x:.*]] = select i1 %flag, ptr %ext1, ptr %ext2
; CHECK: call i8 %[[x]](i1 %cmp)
; CHECK-NOT: call
if.then:
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/Transforms/GVNSink/operand-mismatch.ll
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,25 @@
define void @PR42346() {
; CHECK-LABEL: @PR42346(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CALL1:%.*]] = call %vec* @bar(%map* undef, %vec* (%map*)* undef)
; CHECK-NEXT: [[CALL1:%.*]] = call ptr @bar(ptr undef, ptr undef)
; CHECK-NEXT: br label [[EXIT:%.*]]
; CHECK: if:
; CHECK-NEXT: [[CALL2:%.*]] = call %vec* @baz(%map* undef)
; CHECK-NEXT: [[CALL2:%.*]] = call ptr @baz(ptr undef)
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: ret void
;
entry:
%call1 = call %vec* @bar(%map* undef, %vec* (%map*)* undef)
%call1 = call ptr @bar(ptr undef, ptr undef)
br label %exit

if:
%call2 = call %vec* @baz(%map* undef)
%call2 = call ptr @baz(ptr undef)
br label %exit

exit:
ret void
}

declare %vec* @bar(%map*, %vec* (%map*)*)
declare %vec* @baz(%map*)
declare ptr @bar(ptr, ptr)
declare ptr @baz(ptr)
4 changes: 2 additions & 2 deletions llvm/test/Transforms/GlobalMerge/debug-info.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ target triple = "x86_64-unknown-linux-gnu"
@b = internal global i32 2, !dbg !2

define void @use1() {
%x = load i32, i32* @a
%y = load i32, i32* @b
%x = load i32, ptr @a
%y = load i32, ptr @b
ret void
}
; CHECK: [[A]] = !DIGlobalVariableExpression(var: [[AVAR:![0-9]+]], expr: !DIExpression())
Expand Down
32 changes: 16 additions & 16 deletions llvm/test/Transforms/GlobalOpt/cleanup-pointer-root-users.ll
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
; RUN: opt -passes=globalopt -S -o - < %s | FileCheck %s

@glbl = internal global i8* null
@glbl = internal global ptr null

define void @test1a() {
; CHECK-LABEL: @test1a(
; CHECK-NOT: store
; CHECK-NEXT: ret void
store i8* null, i8** @glbl
store ptr null, ptr @glbl
ret void
}

define void @test1b(i8* %p) {
define void @test1b(ptr %p) {
; CHECK-LABEL: @test1b(
; CHECK-NEXT: store
; CHECK-NEXT: ret void
store i8* %p, i8** @glbl
store ptr %p, ptr @glbl
ret void
}

define void @test2() {
; CHECK-LABEL: @test2(
; CHECK: alloca i8
%txt = alloca i8
call void @foo2(i8* %txt)
%call2 = call i8* @strdup(i8* %txt)
store i8* %call2, i8** @glbl
call void @foo2(ptr %txt)
%call2 = call ptr @strdup(ptr %txt)
store ptr %call2, ptr @glbl
ret void
}
declare i8* @strdup(i8*)
declare void @foo2(i8*)
declare ptr @strdup(ptr)
declare void @foo2(ptr)

define void @test3() uwtable personality i32 (i32, i64, i8*, i8*)* @__gxx_personality_v0 {
define void @test3() uwtable personality ptr @__gxx_personality_v0 {
; CHECK-LABEL: @test3(
; CHECK-NOT: bb1:
; CHECK-NOT: bb2:
; CHECK: invoke
%ptr = invoke i8* @_Znwm(i64 1)
%ptr = invoke ptr @_Znwm(i64 1)
to label %bb1 unwind label %bb2
bb1:
store i8* %ptr, i8** @glbl
store ptr %ptr, ptr @glbl
unreachable
bb2:
%tmp1 = landingpad { i8*, i32 }
%tmp1 = landingpad { ptr, i32 }
cleanup
resume { i8*, i32 } %tmp1
resume { ptr, i32 } %tmp1
}
declare i32 @__gxx_personality_v0(i32, i64, i8*, i8*)
declare i8* @_Znwm(i64)
declare i32 @__gxx_personality_v0(i32, i64, ptr, ptr)
declare ptr @_Znwm(i64)
9 changes: 4 additions & 5 deletions llvm/test/Transforms/GlobalOpt/invariant-nodatalayout.ll
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
; RUN: opt -passes=globalopt -S -o - < %s | FileCheck %s
; The check here is that it doesn't crash.

declare {}* @llvm.invariant.start.p0i8(i64 %size, i8* nocapture %ptr)
declare ptr @llvm.invariant.start.p0(i64 %size, ptr nocapture %ptr)

@object1 = global { i32, i32 } zeroinitializer
; CHECK: @object1 = global { i32, i32 } zeroinitializer

define void @ctor1() {
%ptr = bitcast {i32, i32}* @object1 to i8*
call {}* @llvm.invariant.start.p0i8(i64 4, i8* %ptr)
call ptr @llvm.invariant.start.p0(i64 4, ptr @object1)
ret void
}

@llvm.global_ctors = appending constant
[1 x { i32, void ()*, i8* }]
[ { i32, void ()*, i8* } { i32 65535, void ()* @ctor1, i8* null } ]
[1 x { i32, ptr, ptr }]
[ { i32, ptr, ptr } { i32 65535, ptr @ctor1, ptr null } ]
Original file line number Diff line number Diff line change
Expand Up @@ -6,41 +6,37 @@ target triple = "x86_64-apple-macosx10.14.0"
@c = common global i32 0, align 4
@h = common global i32 0, align 4

declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #0
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #0
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #1
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

declare i32* @m()
declare ptr @m()

; CHECK-LABEL: define void @main()
; CHECK-NEXT: bb:
; CHECK-NEXT: %.sroa.4.i = alloca [20 x i8], align 2
; CHECK-NEXT: %.sroa.5.i = alloca [6 x i8], align 8
; CHECK-NEXT: %i = bitcast [6 x i8]* %.sroa.5.i to i8*

define void @main() #2 {
bb:
%.sroa.4.i = alloca [20 x i8], align 2
%.sroa.5.i = alloca [6 x i8], align 8
%i = bitcast [6 x i8]* %.sroa.5.i to i8*
%i1 = load i32, i32* @h, align 4, !tbaa !4
%i1 = load i32, ptr @h, align 4, !tbaa !4
%i2 = icmp ne i32 %i1, 0
br i1 %i2, label %bb11, label %bb3

bb3: ; preds = %bb
%i4 = call i32* @m()
%.sroa.4.0..sroa_idx21.i = getelementptr inbounds [20 x i8], [20 x i8]* %.sroa.4.i, i64 0, i64 0
call void @llvm.lifetime.start.p0i8(i64 20, i8* %.sroa.4.0..sroa_idx21.i)
%.sroa.5.0..sroa_idx16.i = getelementptr inbounds [6 x i8], [6 x i8]* %.sroa.5.i, i64 0, i64 0
call void @llvm.lifetime.start.p0i8(i64 6, i8* %.sroa.5.0..sroa_idx16.i)
call void @llvm.memset.p0i8.i64(i8* align 2 %.sroa.4.0..sroa_idx21.i, i8 0, i64 20, i1 false)
call void @llvm.memset.p0i8.i64(i8* align 8 %.sroa.5.0..sroa_idx16.i, i8 0, i64 6, i1 false)
%i5 = load i32, i32* @c, align 4, !tbaa !4
%i4 = call ptr @m()
call void @llvm.lifetime.start.p0(i64 20, ptr %.sroa.4.i)
call void @llvm.lifetime.start.p0(i64 6, ptr %.sroa.5.i)
call void @llvm.memset.p0.i64(ptr align 2 %.sroa.4.i, i8 0, i64 20, i1 false)
call void @llvm.memset.p0.i64(ptr align 8 %.sroa.5.i, i8 0, i64 6, i1 false)
%i5 = load i32, ptr @c, align 4, !tbaa !4
%i6 = trunc i32 %i5 to i16
call void @llvm.lifetime.end.p0i8(i64 20, i8* %.sroa.4.0..sroa_idx21.i)
call void @llvm.lifetime.end.p0i8(i64 6, i8* %.sroa.5.0..sroa_idx16.i)
call void @llvm.lifetime.start.p0i8(i64 6, i8* %i)
call void @llvm.memset.p0i8.i64(i8* align 1 %i, i8 3, i64 6, i1 false)
call void @llvm.lifetime.end.p0(i64 20, ptr %.sroa.4.i)
call void @llvm.lifetime.end.p0(i64 6, ptr %.sroa.5.i)
call void @llvm.lifetime.start.p0(i64 6, ptr %.sroa.5.i)
call void @llvm.memset.p0.i64(ptr align 1 %.sroa.5.i, i8 3, i64 6, i1 false)
br label %bb7

bb7: ; preds = %bb7, %bb3
Expand All @@ -51,7 +47,7 @@ bb7: ; preds = %bb7, %bb3
br i1 %i10, label %bb7, label %l.exit

l.exit: ; preds = %bb7
call void @llvm.lifetime.end.p0i8(i64 6, i8* %i)
call void @llvm.lifetime.end.p0(i64 6, ptr %.sroa.5.i)
br label %bb11

bb11: ; preds = %l.exit, %bb
Expand Down
Loading