Add the rest of the stock attributes to the attribute table.
authorEric Christopher <echristo@gmail.com>
Tue, 3 Sep 2013 20:00:20 +0000 (20:00 +0000)
committerEric Christopher <echristo@gmail.com>
Tue, 3 Sep 2013 20:00:20 +0000 (20:00 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189840 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DIEHash.cpp
lib/CodeGen/AsmPrinter/DIEHash.h
test/DebugInfo/X86/fission-hash.ll

index 40db1b2eb0c8e8e2176405eaa13105b08c734f5f..1581c9682dabbdf1944368963edb1413db4f634b 100644 (file)
@@ -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.
index d83f78f68b48f1959697ec5a7a7f72fd3f54a65d..8a40818cd3ba40e2e942dea8c00bf48a681d9b30 100644 (file)
@@ -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:
index c4ba9ca75c945f68b16e81012dfaf14e040e970b..f0fe0d4cd5b88efbc8890fe68b21440ac5726f76 100644 (file)
@@ -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}