Now that #149310 has restricted lifetime intrinsics to only work on allocas, we can also drop the explicit size argument. Instead, the size is implied by the alloca. This removes the ability to only mark a prefix of an alloca alive/dead. We never used that capability, so we should remove the need to handle that possibility everywhere (though many key places, including stack coloring, did not actually respect this).
126 lines
6.1 KiB
LLVM
126 lines
6.1 KiB
LLVM
; RUN: opt -passes=licm %s -S | FileCheck %s
|
|
|
|
; CHECK: %arrayidx4.promoted = load i32, ptr %arrayidx4, align 4
|
|
; CHECK-NOT: !dbg
|
|
; CHECK: br label %for.body
|
|
|
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
|
|
|
@a = dso_local local_unnamed_addr global i16 0, align 2, !dbg !0
|
|
@b = dso_local local_unnamed_addr global i16 0, align 2, !dbg !6
|
|
|
|
; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
|
|
declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
|
|
|
|
declare i16 @e(i32)
|
|
|
|
define i16 @g() !dbg !13 {
|
|
entry:
|
|
%l_284 = alloca [2 x [3 x [6 x i32]]], align 16
|
|
call void @llvm.lifetime.start.p0(ptr nonnull %l_284), !dbg !24
|
|
call void @llvm.dbg.declare(metadata ptr %l_284, metadata !17, metadata !DIExpression()), !dbg !25
|
|
%0 = load i16, ptr @a, align 2, !dbg !26, !tbaa !29
|
|
%cmp11 = icmp sgt i16 %0, -1, !dbg !33
|
|
br i1 %cmp11, label %for.body.lr.ph, label %cleanup, !dbg !34
|
|
|
|
for.body.lr.ph: ; preds = %entry
|
|
br label %for.body, !dbg !34
|
|
|
|
for.body: ; preds = %for.cond2, %for.body.lr.ph
|
|
%call = call signext i16 @e(i32 1), !dbg !35
|
|
%tobool = icmp eq i16 %call, 0, !dbg !35
|
|
br i1 %tobool, label %for.cond2, label %for.body.cleanup_crit_edge, !dbg !38
|
|
|
|
for.cond2: ; preds = %for.body
|
|
%arrayidx4 = getelementptr inbounds [2 x [3 x [6 x i32]]], ptr %l_284, i64 0, i64 1, i64 2, i64 5, !dbg !39
|
|
%l = load i32, ptr %arrayidx4, !dbg !43, !tbaa !44
|
|
%add = add i32 %l, 1, !dbg !43
|
|
store i32 %add, ptr %arrayidx4, align 4, !dbg !43, !tbaa !44
|
|
%arrayidx8 = getelementptr inbounds [2 x [3 x [6 x i32]]], ptr %l_284, i64 0, i64 1, i64 1, i64 4, !dbg !46
|
|
%1 = load i32, ptr %arrayidx8, align 8, !dbg !46, !tbaa !44
|
|
%conv9 = trunc i32 %1 to i16, !dbg !46
|
|
store i16 %conv9, ptr @b, align 2, !dbg !47, !tbaa !29
|
|
%2 = load i16, ptr @a, align 2, !dbg !26, !tbaa !29
|
|
%cmp = icmp sgt i16 %2, -1, !dbg !33
|
|
br i1 %cmp, label %for.body, label %for.cond.cleanup_crit_edge, !dbg !34, !llvm.loop !48
|
|
|
|
for.cond.cleanup_crit_edge: ; preds = %for.cond2
|
|
br label %cleanup, !dbg !34
|
|
|
|
for.body.cleanup_crit_edge: ; preds = %for.body
|
|
br label %cleanup, !dbg !38
|
|
|
|
cleanup: ; preds = %for.body.cleanup_crit_edge, %for.cond.cleanup_crit_edge, %entry
|
|
call void @llvm.lifetime.end.p0(ptr nonnull %l_284), !dbg !51
|
|
ret i16 1, !dbg !51
|
|
}
|
|
|
|
; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
|
|
declare void @llvm.lifetime.start.p0(ptr nocapture) #1
|
|
|
|
; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
|
|
declare void @llvm.lifetime.end.p0(ptr nocapture) #1
|
|
|
|
; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
|
|
declare void @llvm.dbg.value(metadata, metadata, metadata) #0
|
|
|
|
attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
|
attributes #1 = { argmemonly nocallback nofree nosync nounwind willreturn }
|
|
|
|
!llvm.dbg.cu = !{!2}
|
|
!llvm.module.flags = !{!9, !10, !11}
|
|
!llvm.ident = !{!12}
|
|
|
|
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
|
|
!1 = distinct !DIGlobalVariable(name: "a", scope: !2, file: !3, line: 1, type: !8, isLocal: false, isDefinition: true)
|
|
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 237d0e3c0416abf9919406bcc92874cfd15f5e0c)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, splitDebugInlining: false, nameTableKind: None)
|
|
!3 = !DIFile(filename: "a.c", directory: "/home/davide/lldb-build/bin")
|
|
!4 = !{}
|
|
!5 = !{!0, !6}
|
|
!6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression())
|
|
!7 = distinct !DIGlobalVariable(name: "b", scope: !2, file: !3, line: 1, type: !8, isLocal: false, isDefinition: true)
|
|
!8 = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
|
|
!9 = !{i32 7, !"Dwarf Version", i32 4}
|
|
!10 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!11 = !{i32 1, !"wchar_size", i32 4}
|
|
!12 = !{!"clang version 11.0.0 (https://github.com/llvm/llvm-project.git 237d0e3c0416abf9919406bcc92874cfd15f5e0c)"}
|
|
!13 = distinct !DISubprogram(name: "g", scope: !3, file: !3, line: 5, type: !14, scopeLine: 5, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !16)
|
|
!14 = !DISubroutineType(types: !15)
|
|
!15 = !{!8}
|
|
!16 = !{!17}
|
|
!17 = !DILocalVariable(name: "l_284", scope: !13, file: !3, line: 6, type: !18)
|
|
!18 = !DICompositeType(tag: DW_TAG_array_type, baseType: !19, size: 1152, elements: !20)
|
|
!19 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
|
!20 = !{!21, !22, !23}
|
|
!21 = !DISubrange(count: 2)
|
|
!22 = !DISubrange(count: 3)
|
|
!23 = !DISubrange(count: 6)
|
|
!24 = !DILocation(line: 6, column: 3, scope: !13)
|
|
!25 = !DILocation(line: 6, column: 7, scope: !13)
|
|
!26 = !DILocation(line: 7, column: 10, scope: !27)
|
|
!27 = distinct !DILexicalBlock(scope: !28, file: !3, line: 7, column: 3)
|
|
!28 = distinct !DILexicalBlock(scope: !13, file: !3, line: 7, column: 3)
|
|
!29 = !{!30, !30, i64 0}
|
|
!30 = !{!"short", !31, i64 0}
|
|
!31 = !{!"omnipotent char", !32, i64 0}
|
|
!32 = !{!"Simple C/C++ TBAA"}
|
|
!33 = !DILocation(line: 7, column: 12, scope: !27)
|
|
!34 = !DILocation(line: 7, column: 3, scope: !28)
|
|
!35 = !DILocation(line: 8, column: 9, scope: !36)
|
|
!36 = distinct !DILexicalBlock(scope: !37, file: !3, line: 8, column: 9)
|
|
!37 = distinct !DILexicalBlock(scope: !27, file: !3, line: 7, column: 19)
|
|
!38 = !DILocation(line: 8, column: 9, scope: !37)
|
|
!39 = !DILocation(line: 11, column: 7, scope: !40)
|
|
!40 = distinct !DILexicalBlock(scope: !41, file: !3, line: 10, column: 14)
|
|
!41 = distinct !DILexicalBlock(scope: !42, file: !3, line: 10, column: 5)
|
|
!42 = distinct !DILexicalBlock(scope: !37, file: !3, line: 10, column: 5)
|
|
!43 = !DILocation(line: 11, column: 22, scope: !40)
|
|
!44 = !{!45, !45, i64 0}
|
|
!45 = !{!"int", !31, i64 0}
|
|
!46 = !DILocation(line: 16, column: 9, scope: !37)
|
|
!47 = !DILocation(line: 16, column: 7, scope: !37)
|
|
!48 = distinct !{!48, !34, !49, !50}
|
|
!49 = !DILocation(line: 17, column: 3, scope: !28)
|
|
!50 = !{!"llvm.loop.unroll.disable"}
|
|
!51 = !DILocation(line: 18, column: 1, scope: !13)
|