1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 12:43:36 +01:00
llvm-mirror/test/Transforms/CodeExtractor/live_shrink_multiple.ll
Vedant Kumar 3d60239dc7 [CodeExtractor] Fix sinking of allocas with multiple bitcast uses (PR42451)
An alloca which can be sunk into the extraction region may have more
than one bitcast use. Move these uses along with the alloca to prevent
use-before-def.

Testing: check-llvm, stage2 build of clang

Fixes llvm.org/PR42451.

Differential Revision: https://reviews.llvm.org/D64463

llvm-svn: 365660
2019-07-10 16:32:20 +00:00

67 lines
2.0 KiB
LLVM

; RUN: opt -S -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.A = type { i32 }
@cond = local_unnamed_addr global i32 0, align 4
; Function Attrs: uwtable
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
%tmp5 = icmp eq i32 %tmp4, 0
br i1 %tmp5, label %bb6, label %bb7
bb6: ; preds = %bb
call void @_ZN1A7memfuncEv(%class.A* 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)
ret void
}
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
declare void @_ZN1A7memfuncEv(%class.A*) local_unnamed_addr
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
; Function Attrs: uwtable
define void @_Z3goov() local_unnamed_addr {
bb:
tail call void @_Z3foov()
ret void
}
; CHECK-LABEL: define internal void @_Z3foov.1.
; 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: br label {{.*}}exitStub
!llvm.module.flags = !{!0}
!llvm.ident = !{!1}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{!"clang version 5.0.0 (trunk 304489)"}
!2 = !{!3, !3, i64 0}
!3 = !{!"int", !4, i64 0}
!4 = !{!"omnipotent char", !5, i64 0}
!5 = !{!"Simple C++ TBAA"}