[llvm] r356731 - [BPF] fix flaky btf unit test static-var-derived-type.ll
Eli Friedman via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 22 15:11:51 PDT 2019
Please fix the compiler so that the output is deterministic. Even if the result is equivalent, non-deterministic results cause problems for reproducible builds and tracking down bugs. See http://llvm.org/docs/ProgrammersManual.html#llvm-adt-mapvector-h etc.
-Eli
> -----Original Message-----
> From: llvm-commits <llvm-commits-bounces at lists.llvm.org> On Behalf Of
> Yonghong Song via llvm-commits
> Sent: Thursday, March 21, 2019 7:55 PM
> To: llvm-commits at lists.llvm.org
> Subject: [EXT] [llvm] r356731 - [BPF] fix flaky btf unit test static-var-derived-
> type.ll
>
> Author: yhs
> Date: Thu Mar 21 19:54:47 2019
> New Revision: 356731
>
> URL: http://llvm.org/viewvc/llvm-project?rev=356731&view=rev
> Log:
> [BPF] fix flaky btf unit test static-var-derived-type.ll
>
> The DataSecEentries is defined as an unordered_map since
> order does not really matter.
> std::unordered_map<std::string, std::unique_ptr<BTFKindDataSec>>
> DataSecEntries;
> This seems causing the test static-var-derived-type.ll flaky
> as two sections ".bss" and ".readonly" have undeterministic
> ordering when performing map iterating, which decides the
> output assembly code sequence of BTF_KIND_DATASEC entries.
>
> Fix the test to have only one data section to remove
> flakiness.
>
> Signed-off-by: Yonghong Song <yhs at fb.com>
>
> Modified:
> llvm/trunk/test/CodeGen/BPF/BTF/static-var-derived-type.ll
>
> Modified: llvm/trunk/test/CodeGen/BPF/BTF/static-var-derived-type.ll
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/test/CodeGen/BPF/BTF/static-var-derived-
> type.ll?rev=356731&r1=356730&r2=356731&view=diff
> =================================================================
> =============
> --- llvm/trunk/test/CodeGen/BPF/BTF/static-var-derived-type.ll (original)
> +++ llvm/trunk/test/CodeGen/BPF/BTF/static-var-derived-type.ll Thu Mar 21
> 19:54:47 2019
> @@ -6,32 +6,26 @@
> ; static int * volatile v1;
> ; static const int * volatile v2;
> ; static volatile int_ptr v3 = 0;
> -; static volatile const int_ptr v4 = 0;
> -; long foo() { return (long)(v1 - v2 + v3 - v4); }
> +; long foo() { return (long)(v1 - v2 + v3); }
> ; Compilation flag:
> ; clang -target bpf -O2 -g -S -emit-llvm test.c
>
> @v1 = internal global i32* null, align 8, !dbg !0
> @v2 = internal global i32* null, align 8, !dbg !8
> @v3 = internal global i32* null, align 8, !dbg !14
> - at v4 = internal constant i32* null, align 8, !dbg !19
>
> ; Function Attrs: norecurse nounwind
> -define dso_local i64 @foo() local_unnamed_addr #0 !dbg !27 {
> - %1 = load volatile i32*, i32** @v1, align 8, !dbg !29, !tbaa !30
> - %2 = load volatile i32*, i32** @v2, align 8, !dbg !34, !tbaa !30
> - %3 = ptrtoint i32* %1 to i64, !dbg !35
> - %4 = ptrtoint i32* %2 to i64, !dbg !35
> - %5 = sub i64 %3, %4, !dbg !35
> - %6 = ashr exact i64 %5, 2, !dbg !35
> - %7 = load volatile i32*, i32** @v3, align 8, !dbg !36, !tbaa !30
> - %8 = getelementptr inbounds i32, i32* %7, i64 %6, !dbg !37
> - %9 = load volatile i32*, i32** @v4, align 8, !dbg !38, !tbaa !30
> - %10 = ptrtoint i32* %8 to i64, !dbg !39
> - %11 = ptrtoint i32* %9 to i64, !dbg !39
> - %12 = sub i64 %10, %11, !dbg !39
> - %13 = ashr exact i64 %12, 2, !dbg !39
> - ret i64 %13, !dbg !40
> +define dso_local i64 @foo() local_unnamed_addr #0 !dbg !24 {
> + %1 = load volatile i32*, i32** @v1, align 8, !dbg !26, !tbaa !27
> + %2 = load volatile i32*, i32** @v2, align 8, !dbg !31, !tbaa !27
> + %3 = ptrtoint i32* %1 to i64, !dbg !32
> + %4 = ptrtoint i32* %2 to i64, !dbg !32
> + %5 = sub i64 %3, %4, !dbg !32
> + %6 = ashr exact i64 %5, 2, !dbg !32
> + %7 = load volatile i32*, i32** @v3, align 8, !dbg !33, !tbaa !27
> + %8 = getelementptr inbounds i32, i32* %7, i64 %6, !dbg !34
> + %9 = ptrtoint i32* %8 to i64, !dbg !35
> + ret i64 %9, !dbg !36
> }
>
> ; CHECK: .section .BTF,"", at progbits
> @@ -40,9 +34,9 @@ define dso_local i64 @foo() local_unname
> ; CHECK-NEXT: .byte 0
> ; CHECK-NEXT: .long 24
> ; CHECK-NEXT: .long 0
> -; CHECK-NEXT: .long 288
> -; CHECK-NEXT: .long 288
> -; CHECK-NEXT: .long 95
> +; CHECK-NEXT: .long 236
> +; CHECK-NEXT: .long 236
> +; CHECK-NEXT: .long 84
> ; CHECK-NEXT: .long 0 # BTF_KIND_FUNC_PROTO(id = 1)
> ; CHECK-NEXT: .long 218103808 # 0xd000000
> ; CHECK-NEXT: .long 2
> @@ -90,20 +84,7 @@ define dso_local i64 @foo() local_unname
> ; CHECK-NEXT: .long 234881024 # 0xe000000
> ; CHECK-NEXT: .long 12
> ; CHECK-NEXT: .long 0
> -; CHECK-NEXT: .long 0 # BTF_KIND_CONST(id = 15)
> -; CHECK-NEXT: .long 167772160 # 0xa000000
> -; CHECK-NEXT: .long 12
> -; CHECK-NEXT: .long 79 # BTF_KIND_VAR(id = 16)
> -; CHECK-NEXT: .long 234881024 # 0xe000000
> -; CHECK-NEXT: .long 15
> -; CHECK-NEXT: .long 0
> -; CHECK-NEXT: .long 82 # BTF_KIND_DATASEC(id = 17)
> -; CHECK-NEXT: .long 251658241 # 0xf000001
> -; CHECK-NEXT: .long 0
> -; CHECK-NEXT: .long 16
> -; CHECK-NEXT: .long v4
> -; CHECK-NEXT: .long 8
> -; CHECK-NEXT: .long 90 # BTF_KIND_DATASEC(id = 18)
> +; CHECK-NEXT: .long 79 # BTF_KIND_DATASEC(id = 15)
> ; CHECK-NEXT: .long 251658243 # 0xf000003
> ; CHECK-NEXT: .long 0
> ; CHECK-NEXT: .long 7
> @@ -134,27 +115,23 @@ define dso_local i64 @foo() local_unname
> ; CHECK-NEXT: .byte 0
> ; CHECK-NEXT: .ascii "v3" # string offset=76
> ; CHECK-NEXT: .byte 0
> -; CHECK-NEXT: .ascii "v4" # string offset=79
> -; CHECK-NEXT: .byte 0
> -; CHECK-NEXT: .ascii ".rodata" # string offset=82
> -; CHECK-NEXT: .byte 0
> -; CHECK-NEXT: .ascii ".bss" # string offset=90
> +; CHECK-NEXT: .ascii ".bss" # string offset=79
> ; CHECK-NEXT: .byte 0
>
> attributes #0 = { norecurse nounwind "correctly-rounded-divide-sqrt-fp-
> math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-
> frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-
> math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-
> zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-
> size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
>
> !llvm.dbg.cu = !{!2}
> -!llvm.module.flags = !{!23, !24, !25}
> -!llvm.ident = !{!26}
> +!llvm.module.flags = !{!20, !21, !22}
> +!llvm.ident = !{!23}
>
> !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
> -!1 = distinct !DIGlobalVariable(name: "v1", scope: !2, file: !3, line: 2, type: !22,
> isLocal: true, isDefinition: true)
> +!1 = distinct !DIGlobalVariable(name: "v1", scope: !2, file: !3, line: 2, type: !19,
> isLocal: true, isDefinition: true)
> !2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang
> version 8.0.20181009 ", isOptimized: true, runtimeVersion: 0, emissionKind:
> FullDebug, enums: !4, retainedTypes: !5, globals: !7, nameTableKind: None)
> !3 = !DIFile(filename: "test.c", directory: "/home/yhs/work/tests/llvm/bugs")
> !4 = !{}
> !5 = !{!6}
> !6 = !DIBasicType(name: "long int", size: 64, encoding: DW_ATE_signed)
> -!7 = !{!0, !8, !14, !19}
> +!7 = !{!0, !8, !14}
> !8 = !DIGlobalVariableExpression(var: !9, expr: !DIExpression())
> !9 = distinct !DIGlobalVariable(name: "v2", scope: !2, file: !3, line: 3, type: !10,
> isLocal: true, isDefinition: true)
> !10 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !11)
> @@ -166,25 +143,21 @@ attributes #0 = { norecurse nounwind "co
> !16 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !17)
> !17 = !DIDerivedType(tag: DW_TAG_typedef, name: "int_ptr", file: !3, line: 1,
> baseType: !18)
> !18 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64)
> -!19 = !DIGlobalVariableExpression(var: !20, expr: !DIExpression())
> -!20 = distinct !DIGlobalVariable(name: "v4", scope: !2, file: !3, line: 5, type: !21,
> isLocal: true, isDefinition: true)
> -!21 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !16)
> -!22 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !18)
> -!23 = !{i32 2, !"Dwarf Version", i32 4}
> -!24 = !{i32 2, !"Debug Info Version", i32 3}
> -!25 = !{i32 1, !"wchar_size", i32 4}
> -!26 = !{!"clang version 8.0.20181009 "}
> -!27 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 6, type: !28,
> isLocal: false, isDefinition: true, scopeLine: 6, isOptimized: true, unit: !2,
> retainedNodes: !4)
> -!28 = !DISubroutineType(types: !5)
> -!29 = !DILocation(line: 6, column: 28, scope: !27)
> -!30 = !{!31, !31, i64 0}
> -!31 = !{!"any pointer", !32, i64 0}
> -!32 = !{!"omnipotent char", !33, i64 0}
> -!33 = !{!"Simple C/C++ TBAA"}
> -!34 = !DILocation(line: 6, column: 33, scope: !27)
> -!35 = !DILocation(line: 6, column: 31, scope: !27)
> -!36 = !DILocation(line: 6, column: 38, scope: !27)
> -!37 = !DILocation(line: 6, column: 36, scope: !27)
> -!38 = !DILocation(line: 6, column: 43, scope: !27)
> -!39 = !DILocation(line: 6, column: 41, scope: !27)
> -!40 = !DILocation(line: 6, column: 14, scope: !27)
> +!19 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !18)
> +!20 = !{i32 2, !"Dwarf Version", i32 4}
> +!21 = !{i32 2, !"Debug Info Version", i32 3}
> +!22 = !{i32 1, !"wchar_size", i32 4}
> +!23 = !{!"clang version 8.0.20181009 "}
> +!24 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 5, type: !25,
> isLocal: false, isDefinition: true, scopeLine: 5, isOptimized: true, unit: !2,
> retainedNodes: !4)
> +!25 = !DISubroutineType(types: !5)
> +!26 = !DILocation(line: 5, column: 28, scope: !24)
> +!27 = !{!28, !28, i64 0}
> +!28 = !{!"any pointer", !29, i64 0}
> +!29 = !{!"omnipotent char", !30, i64 0}
> +!30 = !{!"Simple C/C++ TBAA"}
> +!31 = !DILocation(line: 5, column: 33, scope: !24)
> +!32 = !DILocation(line: 5, column: 31, scope: !24)
> +!33 = !DILocation(line: 5, column: 38, scope: !24)
> +!34 = !DILocation(line: 5, column: 36, scope: !24)
> +!35 = !DILocation(line: 5, column: 21, scope: !24)
> +!36 = !DILocation(line: 5, column: 14, scope: !24)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list