[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