summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2013-09-03 20:00:20 +0000
committerEric Christopher <echristo@gmail.com>2013-09-03 20:00:20 +0000
commite020fa7c9cf784e2b2a748c342daa15e81ccdf3f (patch)
treeca57a18869ab9a8313213ae8db474ae1c1178471
parent7deccf0f06bc6461981cb3a23f1f6f6c145ca93e (diff)
downloadbcm5719-llvm-e020fa7c9cf784e2b2a748c342daa15e81ccdf3f.tar.gz
bcm5719-llvm-e020fa7c9cf784e2b2a748c342daa15e81ccdf3f.zip
Add the rest of the stock attributes to the attribute table.
This won't affect the kinds of hashes we test for as we actually do hashing based on form and attribute. Change the fission-hash testcase one last time to handle DW_AT_comp_dir. llvm-svn: 189840
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp196
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DIEHash.h50
-rw-r--r--llvm/test/DebugInfo/X86/fission-hash.ll4
3 files changed, 242 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp b/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp
index 40db1b2eb0c..1581c9682da 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp
@@ -119,8 +119,146 @@ void DIEHash::collectAttributes(DIE *Die, DIEAttrs &Attrs) {
case dwarf::DW_AT_name:
COLLECT_ATTR(DW_AT_name);
break;
- case dwarf::DW_AT_language:
- COLLECT_ATTR(DW_AT_language);
+ case dwarf::DW_AT_accessibility:
+ COLLECT_ATTR(DW_AT_accessibility)
+ break;
+ case dwarf::DW_AT_address_class:
+ COLLECT_ATTR(DW_AT_address_class)
+ break;
+ case dwarf::DW_AT_allocated:
+ COLLECT_ATTR(DW_AT_allocated)
+ break;
+ case dwarf::DW_AT_artificial:
+ COLLECT_ATTR(DW_AT_artificial)
+ break;
+ case dwarf::DW_AT_associated:
+ COLLECT_ATTR(DW_AT_associated)
+ break;
+ case dwarf::DW_AT_binary_scale:
+ COLLECT_ATTR(DW_AT_binary_scale)
+ break;
+ case dwarf::DW_AT_bit_offset:
+ COLLECT_ATTR(DW_AT_bit_offset)
+ break;
+ case dwarf::DW_AT_bit_size:
+ COLLECT_ATTR(DW_AT_bit_size)
+ break;
+ case dwarf::DW_AT_bit_stride:
+ COLLECT_ATTR(DW_AT_bit_stride)
+ break;
+ case dwarf::DW_AT_byte_size:
+ COLLECT_ATTR(DW_AT_byte_size)
+ break;
+ case dwarf::DW_AT_byte_stride:
+ COLLECT_ATTR(DW_AT_byte_stride)
+ break;
+ case dwarf::DW_AT_const_expr:
+ COLLECT_ATTR(DW_AT_const_expr)
+ break;
+ case dwarf::DW_AT_const_value:
+ COLLECT_ATTR(DW_AT_const_value)
+ break;
+ case dwarf::DW_AT_containing_type:
+ COLLECT_ATTR(DW_AT_containing_type)
+ break;
+ case dwarf::DW_AT_count:
+ COLLECT_ATTR(DW_AT_count)
+ break;
+ case dwarf::DW_AT_data_bit_offset:
+ COLLECT_ATTR(DW_AT_data_bit_offset)
+ break;
+ case dwarf::DW_AT_data_location:
+ COLLECT_ATTR(DW_AT_data_location)
+ break;
+ case dwarf::DW_AT_data_member_location:
+ COLLECT_ATTR(DW_AT_data_member_location)
+ break;
+ case dwarf::DW_AT_decimal_scale:
+ COLLECT_ATTR(DW_AT_decimal_scale)
+ break;
+ case dwarf::DW_AT_decimal_sign:
+ COLLECT_ATTR(DW_AT_decimal_sign)
+ break;
+ case dwarf::DW_AT_default_value:
+ COLLECT_ATTR(DW_AT_default_value)
+ break;
+ case dwarf::DW_AT_digit_count:
+ COLLECT_ATTR(DW_AT_digit_count)
+ break;
+ case dwarf::DW_AT_discr:
+ COLLECT_ATTR(DW_AT_discr)
+ break;
+ case dwarf::DW_AT_discr_list:
+ COLLECT_ATTR(DW_AT_discr_list)
+ break;
+ case dwarf::DW_AT_discr_value:
+ COLLECT_ATTR(DW_AT_discr_value)
+ break;
+ case dwarf::DW_AT_encoding:
+ COLLECT_ATTR(DW_AT_encoding)
+ break;
+ case dwarf::DW_AT_enum_class:
+ COLLECT_ATTR(DW_AT_enum_class)
+ break;
+ case dwarf::DW_AT_endianity:
+ COLLECT_ATTR(DW_AT_endianity)
+ break;
+ case dwarf::DW_AT_explicit:
+ COLLECT_ATTR(DW_AT_explicit)
+ break;
+ case dwarf::DW_AT_is_optional:
+ COLLECT_ATTR(DW_AT_is_optional)
+ break;
+ case dwarf::DW_AT_location:
+ COLLECT_ATTR(DW_AT_location)
+ break;
+ case dwarf::DW_AT_lower_bound:
+ COLLECT_ATTR(DW_AT_lower_bound)
+ break;
+ case dwarf::DW_AT_mutable:
+ COLLECT_ATTR(DW_AT_mutable)
+ break;
+ case dwarf::DW_AT_ordering:
+ COLLECT_ATTR(DW_AT_ordering)
+ break;
+ case dwarf::DW_AT_picture_string:
+ COLLECT_ATTR(DW_AT_picture_string)
+ break;
+ case dwarf::DW_AT_prototyped:
+ COLLECT_ATTR(DW_AT_prototyped)
+ break;
+ case dwarf::DW_AT_small:
+ COLLECT_ATTR(DW_AT_small)
+ break;
+ case dwarf::DW_AT_segment:
+ COLLECT_ATTR(DW_AT_segment)
+ break;
+ case dwarf::DW_AT_string_length:
+ COLLECT_ATTR(DW_AT_string_length)
+ break;
+ case dwarf::DW_AT_threads_scaled:
+ COLLECT_ATTR(DW_AT_threads_scaled)
+ break;
+ case dwarf::DW_AT_upper_bound:
+ COLLECT_ATTR(DW_AT_upper_bound)
+ break;
+ case dwarf::DW_AT_use_location:
+ COLLECT_ATTR(DW_AT_use_location)
+ break;
+ case dwarf::DW_AT_use_UTF8:
+ COLLECT_ATTR(DW_AT_use_UTF8)
+ break;
+ case dwarf::DW_AT_variable_parameter:
+ COLLECT_ATTR(DW_AT_variable_parameter)
+ break;
+ case dwarf::DW_AT_virtuality:
+ COLLECT_ATTR(DW_AT_virtuality)
+ break;
+ case dwarf::DW_AT_visibility:
+ COLLECT_ATTR(DW_AT_visibility)
+ break;
+ case dwarf::DW_AT_vtable_elem_location:
+ COLLECT_ATTR(DW_AT_vtable_elem_location)
break;
default:
break;
@@ -145,7 +283,8 @@ void DIEHash::hashAttribute(AttrEntry Attr) {
// TODO: Add support for additional forms.
switch (Desc->getForm()) {
- // TODO: We'll want to add DW_FORM_string here if we start emitting them again.
+ // TODO: We'll want to add DW_FORM_string here if we start emitting them
+ // again.
case dwarf::DW_FORM_strp:
addString(cast<DIEString>(Value)->getString());
break;
@@ -168,9 +307,56 @@ void DIEHash::hashAttributes(const DIEAttrs &Attrs) {
hashAttribute(ATTR); \
}
- // FIXME: Add the rest.
ADD_ATTR(Attrs.DW_AT_name);
- ADD_ATTR(Attrs.DW_AT_language);
+ ADD_ATTR(Attrs.DW_AT_accessibility);
+ ADD_ATTR(Attrs.DW_AT_address_class);
+ ADD_ATTR(Attrs.DW_AT_allocated);
+ ADD_ATTR(Attrs.DW_AT_artificial);
+ ADD_ATTR(Attrs.DW_AT_associated);
+ ADD_ATTR(Attrs.DW_AT_binary_scale);
+ ADD_ATTR(Attrs.DW_AT_bit_offset);
+ ADD_ATTR(Attrs.DW_AT_bit_size);
+ ADD_ATTR(Attrs.DW_AT_bit_stride);
+ ADD_ATTR(Attrs.DW_AT_byte_size);
+ ADD_ATTR(Attrs.DW_AT_byte_stride);
+ ADD_ATTR(Attrs.DW_AT_const_expr);
+ ADD_ATTR(Attrs.DW_AT_const_value);
+ ADD_ATTR(Attrs.DW_AT_containing_type);
+ ADD_ATTR(Attrs.DW_AT_count);
+ ADD_ATTR(Attrs.DW_AT_data_bit_offset);
+ ADD_ATTR(Attrs.DW_AT_data_location);
+ ADD_ATTR(Attrs.DW_AT_data_member_location);
+ ADD_ATTR(Attrs.DW_AT_decimal_scale);
+ ADD_ATTR(Attrs.DW_AT_decimal_sign);
+ ADD_ATTR(Attrs.DW_AT_default_value);
+ ADD_ATTR(Attrs.DW_AT_digit_count);
+ ADD_ATTR(Attrs.DW_AT_discr);
+ ADD_ATTR(Attrs.DW_AT_discr_list);
+ ADD_ATTR(Attrs.DW_AT_discr_value);
+ ADD_ATTR(Attrs.DW_AT_encoding);
+ ADD_ATTR(Attrs.DW_AT_enum_class);
+ ADD_ATTR(Attrs.DW_AT_endianity);
+ ADD_ATTR(Attrs.DW_AT_explicit);
+ ADD_ATTR(Attrs.DW_AT_is_optional);
+ ADD_ATTR(Attrs.DW_AT_location);
+ ADD_ATTR(Attrs.DW_AT_lower_bound);
+ ADD_ATTR(Attrs.DW_AT_mutable);
+ ADD_ATTR(Attrs.DW_AT_ordering);
+ ADD_ATTR(Attrs.DW_AT_picture_string);
+ ADD_ATTR(Attrs.DW_AT_prototyped);
+ ADD_ATTR(Attrs.DW_AT_small);
+ ADD_ATTR(Attrs.DW_AT_segment);
+ ADD_ATTR(Attrs.DW_AT_string_length);
+ ADD_ATTR(Attrs.DW_AT_threads_scaled);
+ ADD_ATTR(Attrs.DW_AT_upper_bound);
+ ADD_ATTR(Attrs.DW_AT_use_location);
+ ADD_ATTR(Attrs.DW_AT_use_UTF8);
+ ADD_ATTR(Attrs.DW_AT_variable_parameter);
+ ADD_ATTR(Attrs.DW_AT_virtuality);
+ ADD_ATTR(Attrs.DW_AT_visibility);
+ ADD_ATTR(Attrs.DW_AT_vtable_elem_location);
+
+ // FIXME: Add the extended attributes.
}
// Add all of the attributes for \param Die to the hash.
diff --git a/llvm/lib/CodeGen/AsmPrinter/DIEHash.h b/llvm/lib/CodeGen/AsmPrinter/DIEHash.h
index d83f78f68b4..8a40818cd3b 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DIEHash.h
+++ b/llvm/lib/CodeGen/AsmPrinter/DIEHash.h
@@ -29,7 +29,55 @@ class DIEHash {
// Collection of all attributes used in hashing a particular DIE.
struct DIEAttrs {
AttrEntry DW_AT_name;
- AttrEntry DW_AT_language;
+ AttrEntry DW_AT_accessibility;
+ AttrEntry DW_AT_address_class;
+ AttrEntry DW_AT_allocated;
+ AttrEntry DW_AT_artificial;
+ AttrEntry DW_AT_associated;
+ AttrEntry DW_AT_binary_scale;
+ AttrEntry DW_AT_bit_offset;
+ AttrEntry DW_AT_bit_size;
+ AttrEntry DW_AT_bit_stride;
+ AttrEntry DW_AT_byte_size;
+ AttrEntry DW_AT_byte_stride;
+ AttrEntry DW_AT_const_expr;
+ AttrEntry DW_AT_const_value;
+ AttrEntry DW_AT_containing_type;
+ AttrEntry DW_AT_count;
+ AttrEntry DW_AT_data_bit_offset;
+ AttrEntry DW_AT_data_location;
+ AttrEntry DW_AT_data_member_location;
+ AttrEntry DW_AT_decimal_scale;
+ AttrEntry DW_AT_decimal_sign;
+ AttrEntry DW_AT_default_value;
+ AttrEntry DW_AT_digit_count;
+ AttrEntry DW_AT_discr;
+ AttrEntry DW_AT_discr_list;
+ AttrEntry DW_AT_discr_value;
+ AttrEntry DW_AT_encoding;
+ AttrEntry DW_AT_enum_class;
+ AttrEntry DW_AT_endianity;
+ AttrEntry DW_AT_explicit;
+ AttrEntry DW_AT_is_optional;
+ AttrEntry DW_AT_location;
+ AttrEntry DW_AT_lower_bound;
+ AttrEntry DW_AT_mutable;
+ AttrEntry DW_AT_ordering;
+ AttrEntry DW_AT_picture_string;
+ AttrEntry DW_AT_prototyped;
+ AttrEntry DW_AT_small;
+ AttrEntry DW_AT_segment;
+ AttrEntry DW_AT_string_length;
+ AttrEntry DW_AT_threads_scaled;
+ AttrEntry DW_AT_upper_bound;
+ AttrEntry DW_AT_use_location;
+ AttrEntry DW_AT_use_UTF8;
+ AttrEntry DW_AT_variable_parameter;
+ AttrEntry DW_AT_virtuality;
+ AttrEntry DW_AT_visibility;
+ AttrEntry DW_AT_vtable_elem_location;
+
+ // Insert any additional ones here...
};
public:
diff --git a/llvm/test/DebugInfo/X86/fission-hash.ll b/llvm/test/DebugInfo/X86/fission-hash.ll
index c4ba9ca75c9..f0fe0d4cd5b 100644
--- a/llvm/test/DebugInfo/X86/fission-hash.ll
+++ b/llvm/test/DebugInfo/X86/fission-hash.ll
@@ -3,8 +3,8 @@
; The source is an empty file.
-; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xc357bdf055b6393d)
-; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xc357bdf055b6393d)
+; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xa188c11a9264c05d)
+; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xa188c11a9264c05d)
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3}
OpenPOWER on IntegriCloud