[CodeExtractor] Convert some tests to opaque pointers (NFC)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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(...)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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(...)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user