mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
3cc43e7b0b
Currently, if an array element type size is 0, the number of array elements will be set to 0, regardless of what user specified. This implementation is done in the beginning where BTF is mostly used to calculate the member offset. For example, struct s {}; struct s1 { int b; struct s a[2]; }; struct s1 s1; The BTF will have struct "s1" member "a" with element count 0. Now BTF types are used for compile-once and run-everywhere relocations and we need more precise type representation for type comparison. Andrii reported the issue as there are differences between original structure and BTF-generated structure. This patch made the change to correctly assign "2" as the number elements of member "a". Some dead codes related to ElemSize compuation are also removed. Differential Revision: https://reviews.llvm.org/D67979 llvm-svn: 372785
60 lines
2.6 KiB
LLVM
60 lines
2.6 KiB
LLVM
; RUN: llc -march=bpfel -filetype=asm -o - %s | FileCheck -check-prefixes=CHECK %s
|
|
; RUN: llc -march=bpfeb -filetype=asm -o - %s | FileCheck -check-prefixes=CHECK %s
|
|
|
|
; Source code:
|
|
; struct t {};
|
|
; struct t a[10];
|
|
; Compilation flag:
|
|
; clang -target bpf -O2 -g -S -emit-llvm t.c
|
|
|
|
%struct.t = type {}
|
|
|
|
@a = common dso_local local_unnamed_addr global [10 x %struct.t] zeroinitializer, align 1, !dbg !0
|
|
|
|
!llvm.dbg.cu = !{!2}
|
|
!llvm.module.flags = !{!10, !11, !12}
|
|
!llvm.ident = !{!13}
|
|
|
|
; CHECK: .section .BTF,"",@progbits
|
|
; CHECK-NEXT: .short 60319 # 0xeb9f
|
|
; CHECK-NEXT: .byte 1
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .long 24
|
|
; CHECK-NEXT: .long 0
|
|
; CHECK-NEXT: .long 52
|
|
; CHECK-NEXT: .long 52
|
|
; CHECK-NEXT: .long 23
|
|
; CHECK-NEXT: .long 1 # BTF_KIND_STRUCT(id = 1)
|
|
; CHECK-NEXT: .long 67108864 # 0x4000000
|
|
; CHECK-NEXT: .long 0
|
|
; CHECK-NEXT: .long 0 # BTF_KIND_ARRAY(id = 2)
|
|
; CHECK-NEXT: .long 50331648 # 0x3000000
|
|
; CHECK-NEXT: .long 0
|
|
; CHECK-NEXT: .long 1
|
|
; CHECK-NEXT: .long 3
|
|
; CHECK-NEXT: .long 10
|
|
; CHECK-NEXT: .long 3 # BTF_KIND_INT(id = 3)
|
|
; CHECK-NEXT: .long 16777216 # 0x1000000
|
|
; CHECK-NEXT: .long 4
|
|
; CHECK-NEXT: .long 32 # 0x20
|
|
; CHECK-NEXT: .byte 0 # string offset=0
|
|
; CHECK-NEXT: .byte 116 # string offset=1
|
|
; CHECK-NEXT: .byte 0
|
|
; CHECK-NEXT: .ascii "__ARRAY_SIZE_TYPE__" # string offset=3
|
|
; CHECK-NEXT: .byte 0
|
|
|
|
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
|
|
!1 = distinct !DIGlobalVariable(name: "a", scope: !2, file: !3, line: 2, type: !6, isLocal: false, isDefinition: true)
|
|
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 8.0.0 (trunk 345296) (llvm/trunk 345297)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: None)
|
|
!3 = !DIFile(filename: "t.c", directory: "/home/yhs/tmp")
|
|
!4 = !{}
|
|
!5 = !{!0}
|
|
!6 = !DICompositeType(tag: DW_TAG_array_type, baseType: !7, elements: !8)
|
|
!7 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t", file: !3, line: 1, elements: !4)
|
|
!8 = !{!9}
|
|
!9 = !DISubrange(count: 10)
|
|
!10 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!11 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!12 = !{i32 1, !"wchar_size", i32 4}
|
|
!13 = !{!"clang version 8.0.0 (trunk 345296) (llvm/trunk 345297)"}
|