[CodeExtractor] Convert some tests to opaque pointers (NFC)

This commit is contained in:
Nikita Popov
2023-01-03 12:52:47 +01:00
parent 18f627bcf5
commit bbbbbfbdcb
26 changed files with 291 additions and 316 deletions

View File

@@ -13,7 +13,7 @@ loopentry.1: ; preds = %no_exit.1, %loopentry.1.preheader
br i1 false, label %no_exit.1, label %loopexit.0.loopexit1
no_exit.1: ; preds = %loopentry.1
%tmp.53 = load i32, i32* null ; <i32> [#uses=1]
%tmp.53 = load i32, ptr null ; <i32> [#uses=1]
br i1 false, label %shortcirc_next.2, label %loopentry.1
shortcirc_next.2: ; preds = %no_exit.1

View File

@@ -4,7 +4,7 @@ declare i32 @_IO_getc()
declare void @__errno_location()
define void @yylex() personality i32 (...)* @__gcc_personality_v0 {
define void @yylex() personality ptr @__gcc_personality_v0 {
entry:
switch i32 0, label %label.126 [
i32 0, label %return
@@ -190,8 +190,8 @@ return: ; preds = %entry
ret void
LongJmpBlkPre: ; preds = %endif.52, %then.40
%exn = landingpad { i8*, i32 }
catch i8* null
%exn = landingpad { ptr, i32 }
catch ptr null
ret void
}

View File

@@ -1,5 +1,5 @@
; RUN: opt < %s -passes=extract-blocks -disable-output
define i32 @foo() personality i32 (...)* @__gcc_personality_v0 {
define i32 @foo() personality ptr @__gcc_personality_v0 {
br label %EB
EB: ; preds = %0
@@ -10,9 +10,9 @@ Cont: ; preds = %EB
ret i32 %V
Unw: ; preds = %EB
%exn = landingpad { i8*, i32 }
catch i8* null
resume { i8*, i32 } %exn
%exn = landingpad { ptr, i32 }
catch ptr null
resume { ptr, i32 } %exn
}
declare i32 @__gcc_personality_v0(...)

View File

@@ -1,6 +1,6 @@
; RUN: opt < %s -passes='function(loop-simplify),loop-extract' -S | FileCheck %s
@label = common local_unnamed_addr global i8* null
@label = common local_unnamed_addr global ptr null
; CHECK: define
; no outlined function
@@ -9,8 +9,8 @@ define i32 @sterix(i32 %n) {
entry:
%tobool = icmp ne i32 %n, 0
; this blockaddress references a basic block that goes in the extracted loop
%cond = select i1 %tobool, i8* blockaddress(@sterix, %for.cond), i8* blockaddress(@sterix, %exit)
store i8* %cond, i8** @label
%cond = select i1 %tobool, ptr blockaddress(@sterix, %for.cond), ptr blockaddress(@sterix, %exit)
store ptr %cond, ptr @label
%cmp5 = icmp sgt i32 %n, 0
br i1 %cmp5, label %for.body, label %exit

View File

@@ -1,46 +1,46 @@
; RUN: opt < %s -passes='function(loop-simplify),loop-extract' -S | FileCheck %s
@choum.addr = internal unnamed_addr constant [3 x i8*] [i8* blockaddress(@choum, %bb10), i8* blockaddress(@choum, %bb14), i8* blockaddress(@choum, %bb18)]
@choum.addr = internal unnamed_addr constant [3 x ptr] [ptr blockaddress(@choum, %bb10), ptr blockaddress(@choum, %bb14), ptr blockaddress(@choum, %bb18)]
; CHECK: define
; no outlined function
; CHECK-NOT: define
define void @choum(i32 %arg, i32* nocapture %arg1, i32 %arg2) {
define void @choum(i32 %arg, ptr nocapture %arg1, i32 %arg2) {
bb:
%tmp = icmp sgt i32 %arg, 0
br i1 %tmp, label %bb3, label %bb24
bb3: ; preds = %bb
%tmp4 = sext i32 %arg2 to i64
%tmp5 = getelementptr inbounds [3 x i8*], [3 x i8*]* @choum.addr, i64 0, i64 %tmp4
%tmp6 = load i8*, i8** %tmp5
%tmp5 = getelementptr inbounds [3 x ptr], ptr @choum.addr, i64 0, i64 %tmp4
%tmp6 = load ptr, ptr %tmp5
%tmp7 = zext i32 %arg to i64
br label %bb8
bb8: ; preds = %bb18, %bb3
%tmp9 = phi i64 [ 0, %bb3 ], [ %tmp22, %bb18 ]
indirectbr i8* %tmp6, [label %bb10, label %bb14, label %bb18]
indirectbr ptr %tmp6, [label %bb10, label %bb14, label %bb18]
bb10: ; preds = %bb8
%tmp11 = getelementptr inbounds i32, i32* %arg1, i64 %tmp9
%tmp12 = load i32, i32* %tmp11
%tmp11 = getelementptr inbounds i32, ptr %arg1, i64 %tmp9
%tmp12 = load i32, ptr %tmp11
%tmp13 = add nsw i32 %tmp12, 1
store i32 %tmp13, i32* %tmp11
store i32 %tmp13, ptr %tmp11
br label %bb14
bb14: ; preds = %bb10, %bb8
%tmp15 = getelementptr inbounds i32, i32* %arg1, i64 %tmp9
%tmp16 = load i32, i32* %tmp15
%tmp15 = getelementptr inbounds i32, ptr %arg1, i64 %tmp9
%tmp16 = load i32, ptr %tmp15
%tmp17 = shl nsw i32 %tmp16, 1
store i32 %tmp17, i32* %tmp15
store i32 %tmp17, ptr %tmp15
br label %bb18
bb18: ; preds = %bb14, %bb8
%tmp19 = getelementptr inbounds i32, i32* %arg1, i64 %tmp9
%tmp20 = load i32, i32* %tmp19
%tmp19 = getelementptr inbounds i32, ptr %arg1, i64 %tmp9
%tmp20 = load i32, ptr %tmp19
%tmp21 = add nsw i32 %tmp20, -3
store i32 %tmp21, i32* %tmp19
store i32 %tmp21, ptr %tmp19
%tmp22 = add nuw nsw i64 %tmp9, 1
%tmp23 = icmp eq i64 %tmp22, %tmp7
br i1 %tmp23, label %bb24, label %bb8

View File

@@ -10,17 +10,14 @@
; CHECK-LABEL: define void @test()
; CHECK-NEXT: entry:
; CHECK-NEXT: %v1 = alloca i32
; CHECK-NEXT: call void @llvm.dbg.value(metadata i32* %v1
; CHECK-NEXT: %p1 = bitcast i32* %v1 to i8*
; CHECK-NEXT: call void @llvm.dbg.value(metadata i8* %p1,
; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 undef, i8* %p1, i64 4, i1 true)
; CHECK-NEXT: call void @llvm.dbg.value(metadata ptr %v1
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 undef, ptr %v1, i64 4, i1 true)
; CHECK-LABEL: define internal void @test.loop2()
; CHECK-NEXT: newFuncRoot:
; CHECK-NEXT: %v2 = alloca i32
; CHECK-NEXT: %p2 = bitcast i32* %v2 to i8*
; CHECK-LABEL: define internal void @test.loop1(i8* %p1)
; CHECK-LABEL: define internal void @test.loop1(ptr %v1)
; CHECK-NEXT: newFuncRoot:
; CHECK-NEXT: br
@@ -28,22 +25,20 @@ define void @test() {
entry:
%v1 = alloca i32, align 4
%v2 = alloca i32, align 4
%p1 = bitcast i32* %v1 to i8*
%p2 = bitcast i32* %v2 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 undef, i8* %p1, i64 4, i1 true)
call void @llvm.memcpy.p0.p0.i64(ptr align 4 undef, ptr %v1, i64 4, i1 true)
br label %loop1
loop1:
call void @llvm.lifetime.start.p0i8(i64 4, i8* %p1)
%r1 = call i32 @foo(i8* %p1)
call void @llvm.lifetime.end.p0i8(i64 4, i8* %p1)
call void @llvm.lifetime.start.p0(i64 4, ptr %v1)
%r1 = call i32 @foo(ptr %v1)
call void @llvm.lifetime.end.p0(i64 4, ptr %v1)
%cmp1 = icmp ne i32 %r1, 0
br i1 %cmp1, label %loop1, label %loop2
loop2:
call void @llvm.lifetime.start.p0i8(i64 4, i8* %p2)
%r2 = call i32 @foo(i8* %p2)
call void @llvm.lifetime.end.p0i8(i64 4, i8* %p2)
call void @llvm.lifetime.start.p0(i64 4, ptr %v2)
%r2 = call i32 @foo(ptr %v2)
call void @llvm.lifetime.end.p0(i64 4, ptr %v2)
%cmp2 = icmp ne i32 %r2, 0
br i1 %cmp2, label %loop2, label %exit
@@ -51,8 +46,8 @@ exit:
ret void
}
declare i32 @foo(i8*)
declare i32 @foo(ptr)
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture)
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture)
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)

View File

@@ -2,7 +2,7 @@
; RUN: opt < %s -passes=partial-inliner -skip-partial-inlining-cost-analysis -S | FileCheck %s
; RUN: opt < %s -passes=partial-inliner -skip-partial-inlining-cost-analysis -S | FileCheck %s
%"class.base" = type { %"struct.base"* }
%"class.base" = type { ptr }
%"struct.base" = type opaque
@g = external local_unnamed_addr global i32, align 4
@@ -11,23 +11,20 @@
define i32 @callee_sinkable_bitcast(i32 %arg) local_unnamed_addr #0 {
; CHECK-LABEL:define{{.*}}@callee_sinkable_bitcast.{{[0-9]}}
; CHECK: alloca
; CHECK-NEXT: bitcast
; CHECK: call void @llvm.lifetime
bb:
%tmp = alloca %"class.base", align 4
%tmp1 = bitcast %"class.base"* %tmp to i8*
%tmp2 = load i32, i32* @g, align 4, !tbaa !2
%tmp2 = load i32, ptr @g, align 4, !tbaa !2
%tmp3 = add nsw i32 %tmp2, 1
%tmp4 = icmp slt i32 %arg, 0
br i1 %tmp4, label %bb6, label %bb5
bb5: ; preds = %bb
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp1) #2
%tmp11 = bitcast %"class.base"* %tmp to i32*
store i32 %tmp3, i32* %tmp11, align 4, !tbaa !2
store i32 %tmp3, i32* @g, align 4, !tbaa !2
call void @bar(i32* nonnull %tmp11) #2
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp1) #2
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp) #2
store i32 %tmp3, ptr %tmp, align 4, !tbaa !2
store i32 %tmp3, ptr @g, align 4, !tbaa !2
call void @bar(ptr nonnull %tmp) #2
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp) #2
br label %bb6
bb6: ; preds = %bb5, %bb
@@ -35,14 +32,14 @@ bb6: ; preds = %bb5, %bb
ret i32 %tmp7
}
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1
declare void @bar(i32*) local_unnamed_addr #2
declare void @bar2(i32*, i32*) local_unnamed_addr #1
declare void @bar(ptr) local_unnamed_addr #2
declare void @bar2(ptr, ptr) local_unnamed_addr #1
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
; Function Attrs: nounwind uwtable
define i32 @caller(i32 %arg) local_unnamed_addr #0 {

View File

@@ -1,7 +1,7 @@
; RUN: opt < %s -passes=partial-inliner -skip-partial-inlining-cost-analysis -S | FileCheck %s
; RUN: opt < %s -passes=partial-inliner -skip-partial-inlining-cost-analysis -S | FileCheck %s
%"class.base" = type { %"struct.base"* }
%"class.base" = type { ptr }
%"struct.base" = type opaque
@g = external local_unnamed_addr global i32, align 4
@@ -12,17 +12,16 @@ define i32 @callee_no_bitcast(i32 %arg) local_unnamed_addr #0 {
; CHECK: call void @llvm.lifetime
bb:
%tmp = alloca i8, align 4
%tmp2 = load i32, i32* @g, align 4, !tbaa !2
%tmp2 = load i32, ptr @g, align 4, !tbaa !2
%tmp3 = add nsw i32 %tmp2, 1
%tmp4 = icmp slt i32 %arg, 0
br i1 %tmp4, label %bb6, label %bb5
bb5: ; preds = %bb
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp) #2
store i32 %tmp3, i32* @g, align 4, !tbaa !2
%tmp11 = bitcast i8 * %tmp to i32*
call void @bar(i32* nonnull %tmp11) #2
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp) #2
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp) #2
store i32 %tmp3, ptr @g, align 4, !tbaa !2
call void @bar(ptr nonnull %tmp) #2
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp) #2
br label %bb6
bb6: ; preds = %bb5, %bb
@@ -31,14 +30,14 @@ bb6: ; preds = %bb5, %bb
}
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1
declare void @bar(i32*) local_unnamed_addr #2
declare void @bar2(i32*, i32*) local_unnamed_addr #1
declare void @bar(ptr) local_unnamed_addr #2
declare void @bar2(ptr, ptr) local_unnamed_addr #1
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
; Function Attrs: nounwind uwtable
define i32 @caller(i32 %arg) local_unnamed_addr #0 {

View File

@@ -5,7 +5,7 @@
declare void @foo(...) local_unnamed_addr #0
; Function Attrs: noinline
define i32 @caller(i32 (i32)* nocapture %arg, i32 (i32)* nocapture %arg1, i32 %arg2) local_unnamed_addr #1 {
define i32 @caller(ptr nocapture %arg, ptr nocapture %arg1, i32 %arg2) local_unnamed_addr #1 {
bb:
%tmp = tail call i32 %arg(i32 %arg2) #0
%tmp3 = tail call i32 %arg1(i32 %arg2) #0
@@ -43,7 +43,7 @@ bb:
; check that caller is not wrongly inlined by partial inliner
; CHECK: call i32 @caller
; CHECK-NOT: call .* @bar
%tmp = tail call i32 @caller(i32 (i32)* nonnull @bar, i32 (i32)* nonnull @bar, i32 %arg)
%tmp = tail call i32 @caller(ptr nonnull @bar, ptr nonnull @bar, i32 %arg)
ret i32 %tmp
}

View File

@@ -1,35 +1,35 @@
; RUN: opt < %s -skip-partial-inlining-cost-analysis -passes=partial-inliner -S | FileCheck %s
define i32 @Func(i1 %cond, i32* align 4 %align.val) !prof !1 {
define i32 @Func(i1 %cond, ptr align 4 %align.val) !prof !1 {
; CHECK: @Func({{.*}}) !prof [[REMAINCOUNT:![0-9]+]]
entry:
br i1 %cond, label %if.then, label %return
if.then:
; Dummy store to have more than 0 uses
store i32 10, i32* %align.val, align 4
store i32 10, ptr %align.val, align 4
br label %return
return: ; preds = %entry
ret i32 0
}
define internal i32 @Caller1(i1 %cond, i32* align 2 %align.val) !prof !3{
define internal i32 @Caller1(i1 %cond, ptr align 2 %align.val) !prof !3{
entry:
; CHECK-LABEL: @Caller1
; CHECK: br
; CHECK: call void @Func.1.
; CHECK: br
; CHECK: call void @Func.1.
%val = call i32 @Func(i1 %cond, i32* %align.val)
%val2 = call i32 @Func(i1 %cond, i32* %align.val)
%val = call i32 @Func(i1 %cond, ptr %align.val)
%val2 = call i32 @Func(i1 %cond, ptr %align.val)
ret i32 %val
}
define internal i32 @Caller2(i1 %cond, i32* align 2 %align.val) !prof !2{
define internal i32 @Caller2(i1 %cond, ptr align 2 %align.val) !prof !2{
entry:
; CHECK-LABEL: @Caller2
; CHECK: br
; CHECK: call void @Func.1.
%val = call i32 @Func(i1 %cond, i32* %align.val)
%val = call i32 @Func(i1 %cond, ptr %align.val)
ret i32 %val
}

View File

@@ -1,51 +1,50 @@
; RUN: opt < %s -passes=partial-inliner -S | FileCheck %s
; Function Attrs: nounwind uwtable
define dso_local i8* @bar(i32 %arg) local_unnamed_addr #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
define dso_local ptr @bar(i32 %arg) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
bb:
%tmp = icmp slt i32 %arg, 0
br i1 %tmp, label %bb1, label %bb5
bb1: ; preds = %bb
%call26 = invoke i8* @invoke_callee() #2
%call26 = invoke ptr @invoke_callee() #2
to label %cont unwind label %lpad
lpad: ; preds = %if.end
%0 = landingpad { i8*, i32 }
%0 = landingpad { ptr, i32 }
cleanup
resume { i8*, i32 } undef
resume { ptr, i32 } undef
cont:
br label %bb5
bb5: ; preds = %bb4, %bb1, %bb
%retval = phi i8* [ %call26, %cont ], [ undef, %bb]
ret i8* %retval
%retval = phi ptr [ %call26, %cont ], [ undef, %bb]
ret ptr %retval
}
; CHECK-LABEL: @dummy_caller
; CHECK-LABEL: bb:
; CHECK-NEXT: [[CALL26LOC:%.*]] = alloca i8*
; CHECK-NEXT: [[CALL26LOC:%.*]] = alloca ptr
; CHECK-LABEL: codeRepl.i:
; CHECK-NEXT: %lt.cast.i = bitcast i8** [[CALL26LOC]] to i8*
; CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 -1, i8* %lt.cast.i)
; CHECK-NEXT: call void @bar.1.bb1(i8** [[CALL26LOC]])
; CHECK-NEXT: %call26.reload.i = load i8*, i8** [[CALL26LOC]]
; CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 -1, i8* %lt.cast.i)
define i8* @dummy_caller(i32 %arg) {
; CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 -1, ptr [[CALL26LOC]])
; CHECK-NEXT: call void @bar.1.bb1(ptr [[CALL26LOC]])
; CHECK-NEXT: %call26.reload.i = load ptr, ptr [[CALL26LOC]]
; CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 -1, ptr [[CALL26LOC]])
define ptr @dummy_caller(i32 %arg) {
bb:
%tmp = tail call i8* @bar(i32 %arg)
ret i8* %tmp
%tmp = tail call ptr @bar(i32 %arg)
ret ptr %tmp
}
; CHECK-LABEL: define internal void @bar.1.bb1
; CHECK-LABEL: bb1:
; CHECK-NEXT: %call26 = invoke i8* @invoke_callee()
; CHECK-NEXT: %call26 = invoke ptr @invoke_callee()
; CHECK-NEXT: to label %cont unwind label %lpad
; CHECK-LABEL: cont:
; CHECK-NEXT: store i8* %call26, i8** %call26.out
; CHECK-NEXT: store ptr %call26, ptr %call26.out
; CHECK-NEXT: br label %bb5.exitStub
; Function Attrs: nobuiltin
declare dso_local noalias nonnull i8* @invoke_callee() local_unnamed_addr #1
declare dso_local noalias nonnull ptr @invoke_callee() local_unnamed_addr #1
declare dso_local i32 @__gxx_personality_v0(...)

View File

@@ -46,7 +46,7 @@ bb:
; CHECK-LABEL: define internal void @test.1.bb2()
; CHECK: .exitStub:
; CHECK-NOT: store i32 %tmp7, i32* %tmp7.out
; CHECK-NOT: store i32 %tmp7, ptr %tmp7.out
; CHECK: ret

View File

@@ -4,23 +4,22 @@
define i32 @inline_fail(i32 %count, ...) {
entry:
%vargs = alloca i8*, align 8
%vargs1 = bitcast i8** %vargs to i8*
call void @llvm.va_start(i8* %vargs1)
%stat1 = load i32, i32* @stat, align 4
%vargs = alloca ptr, align 8
call void @llvm.va_start(ptr %vargs)
%stat1 = load i32, ptr @stat, align 4
%cmp = icmp slt i32 %stat1, 0
br i1 %cmp, label %bb2, label %bb1
bb1: ; preds = %entry
%vg1 = add nsw i32 %stat1, 1
store i32 %vg1, i32* @stat, align 4
%va1 = va_arg i8** %vargs, i32
store i32 %vg1, ptr @stat, align 4
%va1 = va_arg ptr %vargs, i32
call void @foo(i32 %count, i32 %va1) #2
br label %bb2
bb2: ; preds = %bb1, %entry
%res = phi i32 [ 1, %bb1 ], [ 0, %entry ]
call void @llvm.va_end(i8* %vargs1)
call void @llvm.va_end(ptr %vargs)
ret i32 %res
}
@@ -31,8 +30,8 @@ bb:
}
declare void @foo(i32, i32)
declare void @llvm.va_start(i8*)
declare void @llvm.va_end(i8*)
declare void @llvm.va_start(ptr)
declare void @llvm.va_end(ptr)
; Check that no remarks have been emitted, inline_fail has not been partial
; inlined, no code has been extracted and the partial-inlining counter

View File

@@ -49,7 +49,7 @@ bb:
; CHECK-LABEL: define internal void @test.1.bb2()
; CHECK: .exitStub:
; CHECK-NOT: store i32 %tmp7, i32* %tmp7.out
; CHECK-NOT: store i32 %tmp7, ptr %tmp7.out
; CHECK: ret
attributes #0 = { nounwind uwtable }

View File

@@ -4,8 +4,8 @@
define i32 @callee_indr_branch(i32 %v) {
entry:
%cmp = icmp sgt i32 %v, 2000
%addr = select i1 %cmp, i8* blockaddress(@callee_indr_branch, %if.then), i8* blockaddress(@callee_indr_branch, %if.end)
indirectbr i8* %addr, [ label %if.then, label %if.end]
%addr = select i1 %cmp, ptr blockaddress(@callee_indr_branch, %if.then), ptr blockaddress(@callee_indr_branch, %if.end)
indirectbr ptr %addr, [ label %if.then, label %if.end]
if.then: ; preds = %entry
%mul = mul nsw i32 %v, 10
@@ -21,17 +21,17 @@ if.end: ; preds = %if.then, %entry
ret i32 %add
}
declare void @use_fp(i8 *)
declare void @use_fp(ptr)
declare void @llvm.localescape(...)
declare i8* @llvm.frameaddress(i32)
declare i8* @llvm.localrecover(i8*, i8*, i32)
declare ptr @llvm.frameaddress(i32)
declare ptr @llvm.localrecover(ptr, ptr, i32)
define i32 @callee_frameescape(i32 %v) {
entry:
%a = alloca i32
call void (...) @llvm.localescape(i32* %a)
call void (...) @llvm.localescape(ptr %a)
%cmp = icmp sgt i32 %v, 2000
br i1 %cmp, label %if.then, label %if.end

View File

@@ -3,40 +3,40 @@
target datalayout = "e-m:e-i64:64-n32:64"
target triple = "powerpc64le-unknown-linux-gnu"
%0 = type { i32 (...)**, %1, %1, %3, %3, %3, i8, float, %4*, %5*, %5*, i32, i32, i32, i32, float, float, float, i8*, i32, float, float, float, i8, [7 x i8] }
%0 = type { ptr, %1, %1, %3, %3, %3, i8, float, ptr, ptr, ptr, i32, i32, i32, i32, float, float, float, ptr, i32, float, float, float, i8, [7 x i8] }
%1 = type { %2, %3 }
%2 = type { [3 x %3] }
%3 = type { [4 x float] }
%4 = type <{ i8*, i16, i16, [4 x i8], i8*, i32, %3, %3, [4 x i8] }>
%5 = type { i32 (...)**, i32, i8* }
%6 = type <{ %7, [4 x i8], %19*, %20*, %30, %35, %3, float, i8, i8, i8, i8, %37, i32, [4 x i8] }>
%7 = type <{ %8, [7 x i8], void (%16*, float)*, void (%16*, float)*, i8*, %17 }>
%8 = type <{ i32 (...)**, %9, %11*, %12, %13*, %14*, %15*, i8 }>
%9 = type <{ i8, [3 x i8], i32, i32, [4 x i8], %0**, i8, [7 x i8] }>
%11 = type { i32 (...)** }
%12 = type { float, i32, i32, float, i8, %15*, i8, i8, i8, float, i8, float, %13* }
%4 = type <{ ptr, i16, i16, [4 x i8], ptr, i32, %3, %3, [4 x i8] }>
%5 = type { ptr, i32, ptr }
%6 = type <{ %7, [4 x i8], ptr, ptr, %30, %35, %3, float, i8, i8, i8, i8, %37, i32, [4 x i8] }>
%7 = type <{ %8, [7 x i8], ptr, ptr, ptr, %17 }>
%8 = type <{ ptr, %9, ptr, %12, ptr, ptr, ptr, i8 }>
%9 = type <{ i8, [3 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%11 = type { ptr }
%12 = type { float, i32, i32, float, i8, ptr, i8, i8, i8, float, i8, float, ptr }
%13 = type opaque
%14 = type { i32 (...)** }
%15 = type { i32 (...)** }
%16 = type <{ %8, [7 x i8], void (%16*, float)*, void (%16*, float)*, i8*, %17, [4 x i8] }>
%14 = type { ptr }
%15 = type { ptr }
%16 = type <{ %8, [7 x i8], ptr, ptr, ptr, %17, [4 x i8] }>
%17 = type { %18 }
%18 = type { float, float, float, float, float, i32, float, float, float, float, float, i32, float, float, float, i32, i32 }
%19 = type { i32 (...)** }
%20 = type <{ i32 (...)**, %21, %25, %9, i8, [7 x i8] }>
%19 = type { ptr }
%20 = type <{ ptr, %21, %25, %9, i8, [7 x i8] }>
%21 = type { %22 }
%22 = type <{ i8, [3 x i8], i32, i32, [4 x i8], %24*, i8, [7 x i8] }>
%22 = type <{ i8, [3 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%24 = type { i32, i32 }
%25 = type <{ i8, [3 x i8], i32, i32, [4 x i8], %27**, i8, [7 x i8] }>
%27 = type { i32, [4 x i8], [4 x %29], i8*, i8*, i32, float, float, i32 }
%29 = type <{ %3, %3, %3, %3, %3, float, float, float, i32, i32, i32, i32, [4 x i8], i8*, float, i8, [3 x i8], float, float, i32, %3, %3, [4 x i8] }>
%30 = type <{ i8, [3 x i8], i32, i32, [4 x i8], %32**, i8, [7 x i8] }>
%32 = type { i32 (...)**, i32, i32, i32, i8, %33*, %33*, float, float, %3, %3, %3 }
%33 = type <{ %0, %2, %3, %3, float, %3, %3, %3, %3, %3, %3, %3, float, float, i8, [3 x i8], float, float, float, float, float, float, %34*, %30, i32, i32, i32, [4 x i8] }>
%34 = type { i32 (...)** }
%35 = type <{ i8, [3 x i8], i32, i32, [4 x i8], %33**, i8, [7 x i8] }>
%37 = type <{ i8, [3 x i8], i32, i32, [4 x i8], %39**, i8, [7 x i8] }>
%39 = type { i32 (...)** }
%40 = type <{ i32 (...)**, %9, %11*, %12, %13*, %14*, %15*, i8, [7 x i8] }>
%25 = type <{ i8, [3 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%27 = type { i32, [4 x i8], [4 x %29], ptr, ptr, i32, float, float, i32 }
%29 = type <{ %3, %3, %3, %3, %3, float, float, float, i32, i32, i32, i32, [4 x i8], ptr, float, i8, [3 x i8], float, float, i32, %3, %3, [4 x i8] }>
%30 = type <{ i8, [3 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%32 = type { ptr, i32, i32, i32, i8, ptr, ptr, float, float, %3, %3, %3 }
%33 = type <{ %0, %2, %3, %3, float, %3, %3, %3, %3, %3, %3, %3, float, float, i8, [3 x i8], float, float, float, float, float, float, ptr, %30, i32, i32, i32, [4 x i8] }>
%34 = type { ptr }
%35 = type <{ i8, [3 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%37 = type <{ i8, [3 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%39 = type { ptr }
%40 = type <{ ptr, %9, ptr, %12, ptr, ptr, ptr, i8, [7 x i8] }>
@gDisableDeactivation = external local_unnamed_addr global i8, align 1
@0 = external dso_local unnamed_addr constant [29 x i8], align 1
@@ -46,66 +46,66 @@ target triple = "powerpc64le-unknown-linux-gnu"
declare void @_ZN15CProfileManager12Stop_ProfileEv() local_unnamed_addr
declare void @_ZN15CProfileManager13Start_ProfileEPKc(i8*) local_unnamed_addr
declare void @_ZN15CProfileManager13Start_ProfileEPKc(ptr) local_unnamed_addr
declare void @_ZN17btCollisionObject18setActivationStateEi(%0*, i32 signext) local_unnamed_addr
declare void @_ZN17btCollisionObject18setActivationStateEi(ptr, i32 signext) local_unnamed_addr
declare hidden void @__clang_call_terminate(i8*) local_unnamed_addr
declare hidden void @__clang_call_terminate(ptr) local_unnamed_addr
declare i32 @__gxx_personality_v0(...)
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1) #0
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1) #0
define void @_ZN23btDiscreteDynamicsWorld28internalSingleStepSimulationEf(%6*, float) unnamed_addr align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !prof !27 {
invoke void null(%6* nonnull %0, float %1)
define void @_ZN23btDiscreteDynamicsWorld28internalSingleStepSimulationEf(ptr, float) unnamed_addr align 2 personality ptr @__gxx_personality_v0 !prof !27 {
invoke void null(ptr nonnull %0, float %1)
to label %5 unwind label %3
; <label>:3: ; preds = %2
%4 = landingpad { i8*, i32 }
%4 = landingpad { ptr, i32 }
cleanup
br label %16
; <label>:5: ; preds = %2
%6 = invoke %15* null(%40* null)
%6 = invoke ptr null(ptr null)
to label %11 unwind label %13
; <label>:7: ; preds = %5
invoke void null(%40* null)
invoke void null(ptr null)
to label %8 unwind label %13
; <label>:8: ; preds = %7
invoke void null(%6* nonnull %0)
invoke void null(ptr nonnull %0)
to label %9 unwind label %13
; <label>:9: ; preds = %8
invoke void null(%6* nonnull %0, %17* nonnull dereferenceable(68) null)
invoke void null(ptr nonnull %0, ptr nonnull dereferenceable(68) null)
to label %10 unwind label %13
; <label>:10: ; preds = %9
invoke void null(%6* nonnull %0, float %1)
invoke void null(ptr nonnull %0, float %1)
to label %11 unwind label %13
; <label>:11:
invoke void @_ZN23btDiscreteDynamicsWorld21updateActivationStateEf(%6* nonnull %0, float %1)
invoke void @_ZN23btDiscreteDynamicsWorld21updateActivationStateEf(ptr nonnull %0, float %1)
to label %12 unwind label %13
; <label>:12:
ret void
; <label>:13:
%14 = landingpad { i8*, i32 }
%14 = landingpad { ptr, i32 }
cleanup
%15 = extractvalue { i8*, i32 } %14, 0
%15 = extractvalue { ptr, i32 } %14, 0
br label %16
; <label>:16:
call void @_ZN15CProfileManager12Stop_ProfileEv()
resume { i8*, i32 } zeroinitializer
resume { ptr, i32 } zeroinitializer
}
define void @_ZN23btDiscreteDynamicsWorld21updateActivationStateEf(%6* nocapture readonly, float) local_unnamed_addr align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !prof !27 {
define void @_ZN23btDiscreteDynamicsWorld21updateActivationStateEf(ptr nocapture readonly, float) local_unnamed_addr align 2 personality ptr @__gxx_personality_v0 !prof !27 {
%3 = icmp sgt i32 0, 0
br i1 %3, label %4, label %5, !prof !29
@@ -116,17 +116,17 @@ define void @_ZN23btDiscreteDynamicsWorld21updateActivationStateEf(%6* nocapture
ret void
; <label>:6: ; preds = %4
invoke void @_ZN17btCollisionObject18setActivationStateEi(%0* nonnull null, i32 signext 0)
invoke void @_ZN17btCollisionObject18setActivationStateEi(ptr nonnull null, i32 signext 0)
to label %7 unwind label %8
; <label>:7: ; preds = %6
invoke void @_ZN17btCollisionObject18setActivationStateEi(%0* nonnull null, i32 signext 1)
invoke void @_ZN17btCollisionObject18setActivationStateEi(ptr nonnull null, i32 signext 1)
to label %5 unwind label %8
; <label>:8: ; preds = %7, %6
%9 = landingpad { i8*, i32 }
%9 = landingpad { ptr, i32 }
cleanup
resume { i8*, i32 } %9
resume { ptr, i32 } %9
}
; Function Attrs: noreturn nounwind

View File

@@ -7,96 +7,96 @@ entry:
%ub.addr = alloca i32, align 4
%sum = alloca i32, align 4
%i = alloca i32, align 4
store i32 %value, i32* %value.addr, align 4
store i32 %ub, i32* %ub.addr, align 4
store i32 0, i32* %sum, align 4
store i32 0, i32* %i, align 4
store i32 %value, ptr %value.addr, align 4
store i32 %ub, ptr %ub.addr, align 4
store i32 0, ptr %sum, align 4
store i32 0, ptr %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4
%1 = load i32, i32* %ub.addr, align 4
%0 = load i32, ptr %i, align 4
%1 = load i32, ptr %ub.addr, align 4
%cmp = icmp slt i32 %0, %1
br i1 %cmp, label %for.body, label %for.cond2, !prof !31
for.body: ; preds = %for.cond
%2 = load i32, i32* %value.addr, align 4
%2 = load i32, ptr %value.addr, align 4
%rem = srem i32 %2, 20
%cmp1 = icmp eq i32 %rem, 0
br i1 %cmp1, label %if.then, label %if.else, !prof !32
if.then: ; preds = %for.body
%3 = load i32, i32* %value.addr, align 4
%4 = load i32, i32* %i, align 4
%3 = load i32, ptr %value.addr, align 4
%4 = load i32, ptr %i, align 4
%mul = mul nsw i32 %4, 5
%add = add nsw i32 %3, %mul
%5 = load i32, i32* %sum, align 4
%5 = load i32, ptr %sum, align 4
%add2 = add nsw i32 %5, %add
store i32 %add2, i32* %sum, align 4
store i32 %add2, ptr %sum, align 4
br label %if.then.b
if.then.b: ; preds = %if.then
br label %if.end
if.else: ; preds = %for.body
%6 = load i32, i32* %value.addr, align 4
%7 = load i32, i32* %i, align 4
%6 = load i32, ptr %value.addr, align 4
%7 = load i32, ptr %i, align 4
%sub = sub nsw i32 %6, %7
%8 = load i32, i32* %sum, align 4
%8 = load i32, ptr %sum, align 4
%add3 = add nsw i32 %8, %sub
store i32 %add3, i32* %sum, align 4
store i32 %add3, ptr %sum, align 4
br label %if.end
if.end: ; preds = %if.else, %if.then
br label %for.inc
for.inc: ; preds = %if.end
%9 = load i32, i32* %i, align 4
%9 = load i32, ptr %i, align 4
%inc = add nsw i32 %9, 1
store i32 %inc, i32* %i, align 4
store i32 %inc, ptr %i, align 4
br label %for.cond
for.cond2: ; preds = %for.cond
%10 = load i32, i32* %i, align 4
%11 = load i32, i32* %ub.addr, align 4
%10 = load i32, ptr %i, align 4
%11 = load i32, ptr %ub.addr, align 4
%cmp2 = icmp slt i32 %10, %11
br i1 %cmp2, label %for.body2, label %for.end, !prof !31
for.body2: ; preds = %for.cond2
%12 = load i32, i32* %value.addr, align 4
%12 = load i32, ptr %value.addr, align 4
%rem2 = srem i32 %12, 20
%cmp3 = icmp eq i32 %rem2, 0
br i1 %cmp3, label %if.then2, label %if.else2, !prof !32
if.then2: ; preds = %for.body2
%13 = load i32, i32* %value.addr, align 4
%14 = load i32, i32* %i, align 4
%13 = load i32, ptr %value.addr, align 4
%14 = load i32, ptr %i, align 4
%mul2 = mul nsw i32 %14, 5
%add4 = add nsw i32 %13, %mul2
%15 = load i32, i32* %sum, align 4
%15 = load i32, ptr %sum, align 4
%add5 = add nsw i32 %15, %add4
store i32 %add5, i32* %sum, align 4
store i32 %add5, ptr %sum, align 4
br label %if.then2.b
if.then2.b: ; preds = %if.then2
br label %if.end2
if.else2: ; preds = %for.body2
%16 = load i32, i32* %value.addr, align 4
%17 = load i32, i32* %i, align 4
%16 = load i32, ptr %value.addr, align 4
%17 = load i32, ptr %i, align 4
%sub2 = sub nsw i32 %16, %17
%18 = load i32, i32* %sum, align 4
%18 = load i32, ptr %sum, align 4
%add6 = add nsw i32 %18, %sub2
store i32 %add6, i32* %sum, align 4
store i32 %add6, ptr %sum, align 4
br label %if.end2
if.end2: ; preds = %if.else2, %if.then2
br label %for.inc2
for.inc2: ; preds = %if.end2
%19 = load i32, i32* %i, align 4
%19 = load i32, ptr %i, align 4
%inc2 = add nsw i32 %19, 1
store i32 %inc2, i32* %i, align 4
store i32 %inc2, ptr %i, align 4
br label %for.cond2
for.end: ; preds = %for.cond2
@@ -106,7 +106,7 @@ asm.fallthrough: ; preds = %for.end
br label %l_yes
l_yes:
%20 = load i32, i32* %sum, align 4
%20 = load i32, ptr %sum, align 4
ret i32 %20
}
@@ -120,10 +120,10 @@ define signext i32 @foo(i32 signext %value, i32 signext %ub) #0 !prof !30 {
entry:
%value.addr = alloca i32, align 4
%ub.addr = alloca i32, align 4
store i32 %value, i32* %value.addr, align 4
store i32 %ub, i32* %ub.addr, align 4
%0 = load i32, i32* %value.addr, align 4
%1 = load i32, i32* %ub.addr, align 4
store i32 %value, ptr %value.addr, align 4
store i32 %ub, ptr %ub.addr, align 4
%0 = load i32, ptr %value.addr, align 4
%1 = load i32, ptr %ub.addr, align 4
%call = call signext i32 @bar(i32 signext %0, i32 signext %1)
ret i32 %call
}

View File

@@ -7,57 +7,57 @@ entry:
%ub.addr = alloca i32, align 4
%sum = alloca i32, align 4
%i = alloca i32, align 4
store i32 %value, i32* %value.addr, align 4
store i32 %ub, i32* %ub.addr, align 4
store i32 0, i32* %sum, align 4
store i32 0, i32* %i, align 4
store i32 %value, ptr %value.addr, align 4
store i32 %ub, ptr %ub.addr, align 4
store i32 0, ptr %sum, align 4
store i32 0, ptr %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4
%1 = load i32, i32* %ub.addr, align 4
%0 = load i32, ptr %i, align 4
%1 = load i32, ptr %ub.addr, align 4
%cmp = icmp slt i32 %0, %1
br i1 %cmp, label %for.body, label %for.end, !prof !31
for.body: ; preds = %for.cond
%2 = load i32, i32* %value.addr, align 4
%2 = load i32, ptr %value.addr, align 4
%rem = srem i32 %2, 20
%cmp1 = icmp eq i32 %rem, 0
br i1 %cmp1, label %if.then, label %if.else, !prof !32
if.then: ; preds = %for.body
%3 = load i32, i32* %value.addr, align 4
%4 = load i32, i32* %i, align 4
%3 = load i32, ptr %value.addr, align 4
%4 = load i32, ptr %i, align 4
%mul = mul nsw i32 %4, 5
%add = add nsw i32 %3, %mul
%5 = load i32, i32* %sum, align 4
%5 = load i32, ptr %sum, align 4
%add2 = add nsw i32 %5, %add
store i32 %add2, i32* %sum, align 4
store i32 %add2, ptr %sum, align 4
br label %if.then.b
if.then.b: ; preds = %if.then
br label %if.end
if.else: ; preds = %for.body
%6 = load i32, i32* %value.addr, align 4
%7 = load i32, i32* %i, align 4
%6 = load i32, ptr %value.addr, align 4
%7 = load i32, ptr %i, align 4
%sub = sub nsw i32 %6, %7
%8 = load i32, i32* %sum, align 4
%8 = load i32, ptr %sum, align 4
%add3 = add nsw i32 %8, %sub
store i32 %add3, i32* %sum, align 4
store i32 %add3, ptr %sum, align 4
br label %if.end
if.end: ; preds = %if.else, %if.then
br label %for.inc
for.inc: ; preds = %if.end
%9 = load i32, i32* %i, align 4
%9 = load i32, ptr %i, align 4
%inc = add nsw i32 %9, 1
store i32 %inc, i32* %i, align 4
store i32 %inc, ptr %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
%10 = load i32, i32* %sum, align 4
%10 = load i32, ptr %sum, align 4
ret i32 %10
}
@@ -69,10 +69,10 @@ define signext i32 @foo(i32 signext %value, i32 signext %ub) #0 !prof !30 {
entry:
%value.addr = alloca i32, align 4
%ub.addr = alloca i32, align 4
store i32 %value, i32* %value.addr, align 4
store i32 %ub, i32* %ub.addr, align 4
%0 = load i32, i32* %value.addr, align 4
%1 = load i32, i32* %ub.addr, align 4
store i32 %value, ptr %value.addr, align 4
store i32 %ub, ptr %ub.addr, align 4
%0 = load i32, ptr %value.addr, align 4
%1 = load i32, ptr %ub.addr, align 4
%call = call signext i32 @bar(i32 signext %0, i32 signext %1)
ret i32 %call
}

View File

@@ -4,19 +4,18 @@
define i32 @vararg(i32 %count, ...) {
entry:
%vargs = alloca i8*, align 8
%stat1 = load i32, i32* @stat, align 4
%vargs = alloca ptr, align 8
%stat1 = load i32, ptr @stat, align 4
%cmp = icmp slt i32 %stat1, 0
br i1 %cmp, label %bb2, label %bb1
bb1: ; preds = %entry
%vg1 = add nsw i32 %stat1, 1
store i32 %vg1, i32* @stat, align 4
%vargs1 = bitcast i8** %vargs to i8*
call void @llvm.va_start(i8* %vargs1)
%va1 = va_arg i8** %vargs, i32
store i32 %vg1, ptr @stat, align 4
call void @llvm.va_start(ptr %vargs)
%va1 = va_arg ptr %vargs, i32
call void @foo(i32 %count, i32 %va1) #2
call void @llvm.va_end(i8* %vargs1)
call void @llvm.va_end(ptr %vargs)
br label %bb2
bb2: ; preds = %bb1, %entry
@@ -25,8 +24,8 @@ bb2: ; preds = %bb1, %entry
}
declare void @foo(i32, i32)
declare void @llvm.va_start(i8*)
declare void @llvm.va_end(i8*)
declare void @llvm.va_start(ptr)
declare void @llvm.va_end(ptr)
define i32 @caller1(i32 %arg) {
bb:
@@ -35,7 +34,7 @@ bb:
}
; CHECK-LABEL: @caller1
; CHECK: codeRepl.i:
; CHECK-NEXT: call void (i32, i8**, i32, ...) @vararg.3.bb1(i32 %stat1.i, i8** %vargs.i, i32 %arg)
; CHECK-NEXT: call void (i32, ptr, i32, ...) @vararg.3.bb1(i32 %stat1.i, ptr %vargs.i, i32 %arg)
define i32 @caller2(i32 %arg, float %arg2) {
bb:
@@ -45,31 +44,29 @@ bb:
; CHECK-LABEL: @caller2
; CHECK: codeRepl.i:
; CHECK-NEXT: call void (i32, i8**, i32, ...) @vararg.3.bb1(i32 %stat1.i, i8** %vargs.i, i32 %arg, i32 10, float %arg2)
; CHECK-NEXT: call void (i32, ptr, i32, ...) @vararg.3.bb1(i32 %stat1.i, ptr %vargs.i, i32 %arg, i32 10, float %arg2)
; Test case to check that we do not extract a vararg function, if va_end is in
; a block that is not outlined.
define i32 @vararg_not_legal(i32 %count, ...) {
entry:
%vargs = alloca i8*, align 8
%vargs0 = bitcast i8** %vargs to i8*
%stat1 = load i32, i32* @stat, align 4
%vargs = alloca ptr, align 8
%stat1 = load i32, ptr @stat, align 4
%cmp = icmp slt i32 %stat1, 0
br i1 %cmp, label %bb2, label %bb1
bb1: ; preds = %entry
%vg1 = add nsw i32 %stat1, 1
store i32 %vg1, i32* @stat, align 4
%vargs1 = bitcast i8** %vargs to i8*
call void @llvm.va_start(i8* %vargs1)
%va1 = va_arg i8** %vargs, i32
store i32 %vg1, ptr @stat, align 4
call void @llvm.va_start(ptr %vargs)
%va1 = va_arg ptr %vargs, i32
call void @foo(i32 %count, i32 %va1)
br label %bb2
bb2: ; preds = %bb1, %entry
%res = phi i32 [ 1, %bb1 ], [ 0, %entry ]
%ptr = phi i8* [ %vargs1, %bb1 ], [ %vargs0, %entry]
call void @llvm.va_end(i8* %ptr)
%ptr = phi ptr [ %vargs, %bb1 ], [ %vargs, %entry]
call void @llvm.va_end(ptr %ptr)
ret i32 %res
}
@@ -81,26 +78,26 @@ bb:
ret i32 %res
}
declare i32* @err(i32*)
declare ptr @err(ptr)
define signext i32 @vararg2(i32 * %l, ...) {
define signext i32 @vararg2(ptr %l, ...) {
entry:
br i1 undef, label %cleanup, label %cond.end
cond.end: ; preds = %entry
%call51 = call i32* @err(i32* nonnull %l)
%call51 = call ptr @err(ptr nonnull %l)
unreachable
cleanup: ; preds = %entry
ret i32 0
}
define i32* @caller_with_signext(i32* %foo) {
define ptr @caller_with_signext(ptr %foo) {
entry:
%call1 = tail call signext i32 (i32*, ...) @vararg2(i32* %foo, i32 signext 8)
%call1 = tail call signext i32 (ptr, ...) @vararg2(ptr %foo, i32 signext 8)
unreachable
}
; CHECK-LABEL: @caller_with_signext
; CHECK: codeRepl.i:
; CHECK-NEXT: call void (i32*, ...) @vararg2.1.cond.end(i32* %foo, i32 signext 8)
; CHECK-NEXT: call void (ptr, ...) @vararg2.1.cond.end(ptr %foo, i32 signext 8)

View File

@@ -1,22 +1,22 @@
; RUN: opt < %s -skip-partial-inlining-cost-analysis -passes=partial-inliner -S | FileCheck %s
define internal i32 @inlinedFunc(i1 %cond, i32* align 4 %align.val) {
define internal i32 @inlinedFunc(i1 %cond, ptr align 4 %align.val) {
entry:
br i1 %cond, label %if.then, label %return
if.then:
; Dummy store to have more than 0 uses
store i32 10, i32* %align.val, align 4
store i32 10, ptr %align.val, align 4
br label %return
return: ; preds = %entry
ret i32 0
}
define internal i32 @dummyCaller(i1 %cond, i32* align 2 %align.val) {
define internal i32 @dummyCaller(i1 %cond, ptr align 2 %align.val) {
entry:
; CHECK-LABEL: @dummyCaller
; CHECK: br
; CHECK: call void @inlinedFunc.1.
%val = call i32 @inlinedFunc(i1 %cond, i32* %align.val)
%val = call i32 @inlinedFunc(i1 %cond, ptr %align.val)
ret i32 %val
}

View File

@@ -2,10 +2,10 @@
declare void @bar()
declare i32 @__gxx_personality_v0(...)
declare i8* @__cxa_begin_catch(i8*)
declare ptr @__cxa_begin_catch(ptr)
declare void @__cxa_end_catch()
define internal void @callee(i1 %cond) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
define internal void @callee(i1 %cond) personality ptr @__gxx_personality_v0 {
entry:
br i1 %cond, label %if.then, label %if.end
@@ -17,14 +17,14 @@ invoke.cont:
br label %try.cont
lpad:
%0 = landingpad { i8*, i32 }
catch i8* null
%1 = extractvalue { i8*, i32 } %0, 0
%2 = extractvalue { i8*, i32 } %0, 1
%0 = landingpad { ptr, i32 }
catch ptr null
%1 = extractvalue { ptr, i32 } %0, 0
%2 = extractvalue { ptr, i32 } %0, 1
br label %catch
catch:
%3 = call i8* @__cxa_begin_catch(i8* %1)
%3 = call ptr @__cxa_begin_catch(ptr %1)
call void @__cxa_end_catch()
br label %try.cont
@@ -46,6 +46,6 @@ entry:
ret void
}
; CHECK-LABEL: define {{.*}} @callee.1.{{.*}}() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
; CHECK-LABEL: define {{.*}} @callee.1.{{.*}}() personality ptr @__gxx_personality_v0
; CHECK: invoke void @bar()
; CHECK: landingpad

View File

@@ -3,7 +3,7 @@
declare dso_local void @bar()
declare dso_local i32 @__CxxFrameHandler3(...)
define internal void @callee(i1 %cond) personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
define internal void @callee(i1 %cond) personality ptr @__CxxFrameHandler3 {
entry:
br i1 %cond, label %if.then, label %if.end
@@ -22,7 +22,7 @@ catch.dispatch:
%1 = catchswitch within none [label %catch] unwind to caller
catch:
%2 = catchpad within %1 [i8* null, i32 64, i8* null]
%2 = catchpad within %1 [ptr null, i32 64, ptr null]
catchret from %2 to label %catchret.dest
catchret.dest:
@@ -46,7 +46,7 @@ entry:
ret void
}
; CHECK-LABEL: define {{.*}} @callee.1.{{.*}}() personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*)
; CHECK-LABEL: define {{.*}} @callee.1.{{.*}}() personality ptr @__CxxFrameHandler3
; CHECK: invoke void @bar()
; CHECK: cleanuppad
; CHECK-NEXT: cleanupret

View File

@@ -8,28 +8,27 @@
define void @_Z3foov() local_unnamed_addr {
bb:
%tmp = alloca %class.A, align 4
%tmp1 = bitcast %class.A* %tmp to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp1)
%tmp2 = load i32, i32* @cond, align 4, !tbaa !2
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp)
%tmp2 = load i32, ptr @cond, align 4, !tbaa !2
%tmp3 = icmp eq i32 %tmp2, 0
br i1 %tmp3, label %bb4, label %bb5
bb4: ; preds = %bb
call void @_ZN1A7memfuncEv(%class.A* nonnull %tmp)
call void @_ZN1A7memfuncEv(ptr nonnull %tmp)
br label %bb5
bb5: ; preds = %bb4, %bb
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp1)
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp)
ret void
}
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare void @_ZN1A7memfuncEv(%class.A*) local_unnamed_addr
declare void @_ZN1A7memfuncEv(ptr) local_unnamed_addr
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
; Function Attrs: uwtable
define void @_Z3goov() local_unnamed_addr {
@@ -50,9 +49,8 @@ bb:
; CHECK-LABEL: define internal void @_Z3foov.1.
; CHECK: newFuncRoot:
; CHECK-NEXT: %tmp = alloca %class.A
; CHECK-NEXT: %tmp1 = bitcast %class.A* %tmp to i8*
; CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp1)
; CHECK: call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp1)
; CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp)
; CHECK: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp)
; CHECK-NEXT: br label %bb5.exitStub

View File

@@ -9,9 +9,8 @@
define void @_Z3foov() local_unnamed_addr {
bb:
%tmp = alloca %class.A, align 4
%tmp1 = bitcast %class.A* %tmp to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp1)
%tmp2 = load i32, i32* @cond, align 4, !tbaa !2
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp)
%tmp2 = load i32, ptr @cond, align 4, !tbaa !2
%tmp3 = icmp eq i32 %tmp2, 0
br i1 %tmp3, label %bb4, label %bb9
@@ -20,28 +19,27 @@ bb4: ; preds = %bb
br i1 %foo, label %bb5, label %bb9
bb5: ; preds = %bb4
call void @_ZN1A7memfuncEv(%class.A* nonnull %tmp)
%tmp5 = getelementptr inbounds %class.A, %class.A* %tmp, i64 0, i32 0
%tmp6 = load i32, i32* %tmp5, align 4, !tbaa !6
call void @_ZN1A7memfuncEv(ptr nonnull %tmp)
%tmp6 = load i32, ptr %tmp, align 4, !tbaa !6
%tmp7 = icmp sgt i32 %tmp6, 0
br i1 %tmp7, label %bb9, label %bb8
bb8: ; preds = %bb4
call void @_ZN1A7memfuncEv(%class.A* nonnull %tmp)
call void @_ZN1A7memfuncEv(ptr nonnull %tmp)
br label %bb9
bb9: ; preds = %bb8, %bb4, %bb
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp1)
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp)
ret void
}
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare void @_ZN1A7memfuncEv(%class.A*) local_unnamed_addr
declare void @_ZN1A7memfuncEv(ptr) local_unnamed_addr
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
; Function Attrs: uwtable
define void @_Z3goov() local_unnamed_addr {
@@ -52,7 +50,7 @@ bb:
; CHECK-LABEL: define internal void @_Z3foov.1.
; CHECK: bb9:
; CHECK: call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp1)
; CHECK: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp)
; CHECK: br label %.exitStub

View File

@@ -8,31 +8,29 @@ define void @_Z3foov() local_unnamed_addr {
bb:
%tmp = alloca %class.A, align 4
%tmp1 = alloca %class.A, align 4
%tmp2 = bitcast %class.A* %tmp to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp2)
%tmp3 = bitcast %class.A* %tmp1 to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp3)
%tmp4 = load i32, i32* @cond, align 4, !tbaa !2
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp)
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp1)
%tmp4 = load i32, ptr @cond, align 4, !tbaa !2
%tmp5 = icmp eq i32 %tmp4, 0
br i1 %tmp5, label %bb6, label %bb7
bb6: ; preds = %bb
call void @_ZN1A7memfuncEv(%class.A* nonnull %tmp)
call void @_ZN1A7memfuncEv(ptr nonnull %tmp)
br label %bb7
bb7: ; preds = %bb6, %bb
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp3)
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp2)
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp1)
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp)
ret void
}
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare void @_ZN1A7memfuncEv(%class.A*) local_unnamed_addr
declare void @_ZN1A7memfuncEv(ptr) local_unnamed_addr
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
; Function Attrs: uwtable
define void @_Z3goov() local_unnamed_addr {
@@ -45,12 +43,10 @@ bb:
; CHECK: newFuncRoot:
; CHECK-NEXT: alloca
; CHECK-NEXT: alloca
; CHECK-NEXT: bitcast
; CHECK-NEXT: call void @llvm.lifetime.start.p0i8
; CHECK-NEXT: bitcast
; CHECK-NEXT: call void @llvm.lifetime.start.p0i8
; CHECK: call void @llvm.lifetime.end.p0i8
; CHECK-NEXT: call void @llvm.lifetime.end.p0i8
; CHECK-NEXT: call void @llvm.lifetime.start.p0
; CHECK-NEXT: call void @llvm.lifetime.start.p0
; CHECK: call void @llvm.lifetime.end.p0
; CHECK-NEXT: call void @llvm.lifetime.end.p0
; CHECK-NEXT: br label {{.*}}exitStub

View File

@@ -7,52 +7,49 @@
%class.A = type { i32 }
@cond = local_unnamed_addr global i32 0, align 4
@condptr = external local_unnamed_addr global i32*, align 8
@condptr = external local_unnamed_addr global ptr, align 8
; Function Attrs: uwtable
define void @_Z3foo_unknown_mem_accessv() local_unnamed_addr {
bb:
%tmp = alloca %class.A, align 4
%tmp1 = alloca %class.A, align 4
%tmp2 = bitcast %class.A* %tmp to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp2)
%tmp3 = bitcast %class.A* %tmp1 to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp3)
%tmp4 = load i32*, i32** @condptr, align 8, !tbaa !2
%tmp5 = load i32, i32* %tmp4, align 4, !tbaa !6
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp)
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp1)
%tmp4 = load ptr, ptr @condptr, align 8, !tbaa !2
%tmp5 = load i32, ptr %tmp4, align 4, !tbaa !6
%tmp6 = icmp eq i32 %tmp5, 0
br i1 %tmp6, label %bb7, label %bb8
bb7: ; preds = %bb
call void @_ZN1A7memfuncEv(%class.A* nonnull %tmp)
call void @_ZN1A7memfuncEv(ptr nonnull %tmp)
br label %bb8
bb8: ; preds = %bb7, %bb
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp3)
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp2)
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp1)
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp)
ret void
}
declare void @_Z3barv() local_unnamed_addr
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
declare void @_ZN1A7memfuncEv(%class.A*) local_unnamed_addr
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
declare void @_ZN1A7memfuncEv(ptr) local_unnamed_addr
declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
define void @_Z3foo_unknown_calli(i32 %arg) local_unnamed_addr {
bb:
%tmp = alloca %class.A, align 4
%tmp1 = bitcast %class.A* %tmp to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp1)
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %tmp)
tail call void @_Z3barv()
%tmp2 = icmp eq i32 %arg, 0
br i1 %tmp2, label %bb3, label %bb4
bb3: ; preds = %bb
call void @_ZN1A7memfuncEv(%class.A* nonnull %tmp)
call void @_ZN1A7memfuncEv(ptr nonnull %tmp)
br label %bb4
bb4: ; preds = %bb3, %bb
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp1)
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %tmp)
ret void
}
@@ -63,7 +60,7 @@ define void @_Z3goov() local_unnamed_addr {
; CHECK: lifetime
bb:
call void @_Z3foo_unknown_mem_accessv()
%tmp = load i32, i32* @cond, align 4, !tbaa !2
%tmp = load i32, ptr @cond, align 4, !tbaa !2
tail call void @_Z3foo_unknown_calli(i32 %tmp)
ret void
}