llvm-project/llvm/test/DebugInfo/ARM/illegal-fragment.ll
Lee Wei 1469d82e1c
Remove br i1 undef from some regression tests [NFC] (#115130)
As defined in LangRef, branching on `undef` is undefined behavior.
This PR aims to remove undefined behavior from tests. As UB tests break
Alive2 and may be the root cause of breaking future optimizations.

Here's an Alive2 proof for one of the examples:
https://alive2.llvm.org/ce/z/TncxhP
2024-11-07 08:11:15 +00:00

96 lines
5.3 KiB
LLVM

; RUN: llc -filetype=obj %s -o - | llvm-dwarfdump - | FileCheck %s
; CHECK: file format Mach-O arm
; ModuleID = 'test.ll'
source_filename = "test.i"
target datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"
target triple = "thumbv7s-apple-ios5.0.0"
%struct.vm_object = type { i64 }
; Function Attrs: nounwind ssp
define void @f(ptr %object, ptr nocapture readonly %start, i1 %arg) local_unnamed_addr #0 !dbg !11 {
entry:
tail call void @llvm.dbg.value(metadata ptr %object, metadata !21, metadata !DIExpression()), !dbg !27
tail call void @llvm.dbg.value(metadata ptr %start, metadata !22, metadata !DIExpression()), !dbg !28
tail call void @llvm.dbg.value(metadata i64 %0, metadata !25, metadata !DIExpression()), !dbg !29
tail call void @llvm.dbg.value(metadata i64 %0, metadata !26, metadata !DIExpression(DW_OP_constu, 4096, DW_OP_minus, DW_OP_stack_value)), !dbg !30
; This debug value cannot safely be split into two 32-bit pieces.
; CHECK-NOT: DW_AT_name(offset)
tail call void @llvm.dbg.value(metadata i32 undef, metadata !23, metadata !DIExpression()), !dbg !31
br i1 %arg, label %for.end, label %for.body.lr.ph, !dbg !31
for.body.lr.ph: ; preds = %entry
%0 = load i64, ptr %start, align 4, !dbg !33
br label %for.body, !dbg !31
for.body: ; preds = %for.body, %for.body.lr.ph
%offset.010.in = phi i64 [ %0, %for.body.lr.ph ], [ %offset.010, %for.body ]
%head_size.09 = phi i32 [ undef, %for.body.lr.ph ], [ %sub2, %for.body ]
%offset.010 = add i64 %offset.010.in, -4096
tail call void @llvm.dbg.value(metadata i32 %head_size.09, metadata !23, metadata !DIExpression()), !dbg !30
%call = tail call i32 @use(i64 %offset.010, ptr %object) #2, !dbg !34
%sub2 = add i32 %head_size.09, -4096, !dbg !37
tail call void @llvm.dbg.value(metadata i64 %offset.010, metadata !26, metadata !DIExpression(DW_OP_constu, 4096, DW_OP_minus, DW_OP_stack_value)), !dbg !29
tail call void @llvm.dbg.value(metadata i32 %sub2, metadata !23, metadata !DIExpression()), !dbg !30
%tobool = icmp eq i32 %sub2, 0, !dbg !31
br i1 %tobool, label %for.end, label %for.body, !dbg !31, !llvm.loop !38
for.end: ; preds = %for.body, %entry
ret void, !dbg !40
}
declare i32 @use(...) local_unnamed_addr
; Function Attrs: nounwind readnone speculatable
declare void @llvm.dbg.value(metadata, metadata, metadata) #1
attributes #0 = { nounwind ssp }
attributes #1 = { nounwind readnone speculatable }
attributes #2 = { nobuiltin nounwind }
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!5, !6, !7, !8, !9}
!llvm.ident = !{!10}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0 (trunk 317434) (llvm/trunk 317437)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !3)
!1 = !DIFile(filename: "test.i", directory: "/Data/radar/31209283")
!2 = !{}
!3 = !{!4}
!4 = !DIBasicType(name: "long long unsigned int", size: 64, encoding: DW_ATE_unsigned)
!5 = !{i32 2, !"Dwarf Version", i32 2}
!6 = !{i32 2, !"Debug Info Version", i32 3}
!7 = !{i32 1, !"wchar_size", i32 4}
!8 = !{i32 1, !"min_enum_size", i32 4}
!9 = !{i32 7, !"PIC Level", i32 2}
!10 = !{!"clang version 6.0.0 (trunk 317434) (llvm/trunk 317437)"}
!11 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 6, type: !12, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !20)
!12 = !DISubroutineType(types: !13)
!13 = !{null, !14, !19}
!14 = !DIDerivedType(tag: DW_TAG_typedef, name: "v_t", file: !1, line: 1, baseType: !15)
!15 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !16, size: 32)
!16 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "v", file: !1, line: 2, size: 64, elements: !17)
!17 = !{!18}
!18 = !DIDerivedType(tag: DW_TAG_member, name: "p", scope: !16, file: !1, line: 3, baseType: !4, size: 64)
!19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 32)
!20 = !{!21, !22, !23, !25, !26}
!21 = !DILocalVariable(name: "object", arg: 1, scope: !11, file: !1, line: 6, type: !14)
!22 = !DILocalVariable(name: "start", arg: 2, scope: !11, file: !1, line: 6, type: !19)
!23 = !DILocalVariable(name: "head_size", scope: !11, file: !1, line: 7, type: !24)
!24 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
!25 = !DILocalVariable(name: "orig_start", scope: !11, file: !1, line: 8, type: !4)
!26 = !DILocalVariable(name: "offset", scope: !11, file: !1, line: 9, type: !4)
!27 = !DILocation(line: 6, column: 20, scope: !11)
!28 = !DILocation(line: 6, column: 48, scope: !11)
!29 = !DILocation(line: 7, column: 12, scope: !11)
!30 = !DILocation(line: 10, column: 16, scope: !11)
!31 = !DILocation(line: 11, column: 5, scope: !32)
!32 = distinct !DILexicalBlock(scope: !11, file: !1, line: 11, column: 5)
!33 = !DILocation(line: 8, column: 22, scope: !11)
!34 = !DILocation(line: 13, column: 7, scope: !35)
!35 = distinct !DILexicalBlock(scope: !36, file: !1, line: 12, column: 75)
!36 = distinct !DILexicalBlock(scope: !32, file: !1, line: 11, column: 5)
!37 = !DILocation(line: 12, column: 61, scope: !36)
!38 = distinct !{!38, !31, !39}
!39 = !DILocation(line: 14, column: 3, scope: !32)
!40 = !DILocation(line: 15, column: 1, scope: !11)