reimplement Constant::ContainsRelocations as 
Constant::getRelocationInfo(), which has a much simpler
to use API.  It still should not be part of libvmcore, but
is better than it was.  Also teach it to be smart about 
hidden visibility.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76700 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/ELFTargetAsmInfo.cpp b/lib/Target/ELFTargetAsmInfo.cpp
index 5deabee..1bcfaf9 100644
--- a/lib/Target/ELFTargetAsmInfo.cpp
+++ b/lib/Target/ELFTargetAsmInfo.cpp
@@ -54,20 +54,20 @@
 
   // Decide, whether we need data.rel stuff
   const GlobalVariable* GVar = dyn_cast<GlobalVariable>(GV);
-  if (GVar->hasInitializer()) {
+  if (GVar->hasInitializer() && TM.getRelocationModel() != Reloc::Static) {
     Constant *C = GVar->getInitializer();
     bool isConstant = GVar->isConstant();
     
-    
     // By default - all relocations in PIC mode would force symbol to be
     // placed in r/w section.
-    if (TM.getRelocationModel() != Reloc::Static &&
-        C->ContainsRelocations(Reloc::LocalOrGlobal))
-      return (C->ContainsRelocations(Reloc::Global) ?
-              (isConstant ?
-               SectionKind::DataRelRO : SectionKind::DataRel) :
-              (isConstant ?
-               SectionKind::DataRelROLocal : SectionKind::DataRelLocal));
+    switch (C->getRelocationInfo()) {
+    default: break;
+    case 1:
+      return isConstant ? SectionKind::DataRelROLocal :
+                          SectionKind::DataRelLocal;
+    case 2:
+      return isConstant ? SectionKind::DataRelRO : SectionKind::DataRel;
+    }
   }
 
   return Kind;
diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp
index 580c3fe..96814fe 100644
--- a/lib/Target/TargetAsmInfo.cpp
+++ b/lib/Target/TargetAsmInfo.cpp
@@ -202,13 +202,13 @@
 
   if (isSuitableForBSS(GVar)) {
     // Variable can be easily put to BSS section.
-    return (isThreadLocal ? SectionKind::ThreadBSS : SectionKind::BSS);
+    return isThreadLocal ? SectionKind::ThreadBSS : SectionKind::BSS;
   } else if (GVar->isConstant() && !isThreadLocal) {
     // Now we know, that variable has initializer and it is constant. We need to
     // check its initializer to decide, which section to output it into. Also
     // note, there is no thread-local r/o section.
     Constant *C = GVar->getInitializer();
-    if (C->ContainsRelocations(Reloc::LocalOrGlobal)) {
+    if (C->getRelocationInfo() != 0) {
       // Decide whether it is still possible to put symbol into r/o section.
       if (TM.getRelocationModel() != Reloc::Static)
         return SectionKind::Data;