[llvm] r267103 - Refactor IRObjectFile, extract a static CollectAsmUndefinedRefs() method to parse inline assembly (NFC)

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 22 22:58:10 PDT 2016


On Thu, Apr 21, 2016 at 10:15 PM, Mehdi Amini <mehdi.amini at apple.com> wrote:

> Yeah I fixed it almost immediately in r267104:
> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/3875
>
> MSVC is happy with a move of the enum to create the std::pair. I have no
> idea why but I'm interested to understand if you know?
>

No clue.

-- Sean Silva


>
> --
> Mehdi
>
> On Apr 21, 2016, at 10:04 PM, Sean Silva <chisophugis at gmail.com> wrote:
>
> This seems to break VS2015:
> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/3874
>
> -- Sean Silva
>
> On Thu, Apr 21, 2016 at 9:28 PM, Mehdi Amini via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: mehdi_amini
>> Date: Thu Apr 21 23:28:05 2016
>> New Revision: 267103
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=267103&view=rev
>> Log:
>> Refactor IRObjectFile, extract a static CollectAsmUndefinedRefs() method
>> to parse inline assembly (NFC)
>>
>> I plan to call this from ThinLTOCodeGenerator.
>>
>> From: Mehdi Amini <mehdi.amini at apple.com>
>>
>> Modified:
>>     llvm/trunk/include/llvm/Object/IRObjectFile.h
>>     llvm/trunk/lib/Object/IRObjectFile.cpp
>>
>> Modified: llvm/trunk/include/llvm/Object/IRObjectFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/IRObjectFile.h?rev=267103&r1=267102&r2=267103&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/Object/IRObjectFile.h (original)
>> +++ llvm/trunk/include/llvm/Object/IRObjectFile.h Thu Apr 21 23:28:05 2016
>> @@ -59,6 +59,16 @@ public:
>>    /// error code if not found.
>>    static ErrorOr<MemoryBufferRef> findBitcodeInObject(const ObjectFile
>> &Obj);
>>
>> +  /// Parse inline ASM and collect the symbols that are not defined in
>> +  /// the current module.
>> +  ///
>> +  /// For each found symbol, call \p AsmUndefinedRefs with the name of
>> the
>> +  /// symbol found and the associated flags.
>> +  static void CollectAsmUndefinedRefs(
>> +      Module &TheModule,
>> +      const std::function<void(StringRef, BasicSymbolRef::Flags)> &
>> +          AsmUndefinedRefs);
>> +
>>    /// \brief Finds and returns bitcode in the given memory buffer (which
>> may
>>    /// be either a bitcode file or a native object file with embedded
>> bitcode),
>>    /// or an error code if not found.
>>
>> Modified: llvm/trunk/lib/Object/IRObjectFile.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/IRObjectFile.cpp?rev=267103&r1=267102&r2=267103&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Object/IRObjectFile.cpp (original)
>> +++ llvm/trunk/lib/Object/IRObjectFile.cpp Thu Apr 21 23:28:05 2016
>> @@ -38,12 +38,24 @@ using namespace object;
>>  IRObjectFile::IRObjectFile(MemoryBufferRef Object,
>> std::unique_ptr<Module> Mod)
>>      : SymbolicFile(Binary::ID_IR, Object), M(std::move(Mod)) {
>>    Mang.reset(new Mangler());
>> +  CollectAsmUndefinedRefs(*M, [this](StringRef Name,
>> +                                     BasicSymbolRef::Flags Flags) {
>> +    AsmSymbols.push_back(std::make_pair<std::string, uint32_t>(Name,
>> Flags));
>> +  });
>> +}
>> +
>> +// Parse inline ASM and collect the list of symbols that are not defined
>> in
>> +// the current module. This is inspired from IRObjectFile.
>> +void IRObjectFile::CollectAsmUndefinedRefs(
>> +    Module &TheModule,
>> +    const std::function<void(StringRef, BasicSymbolRef::Flags)> &
>> +        AsmUndefinedRefs) {
>>
>> -  const std::string &InlineAsm = M->getModuleInlineAsm();
>> +  const std::string &InlineAsm = TheModule.getModuleInlineAsm();
>>    if (InlineAsm.empty())
>>      return;
>>
>> -  Triple TT(M->getTargetTriple());
>> +  Triple TT(TheModule.getTargetTriple());
>>    std::string Err;
>>    const Target *T = TargetRegistry::lookupTarget(TT.str(), Err);
>>    if (!T)
>> @@ -106,8 +118,7 @@ IRObjectFile::IRObjectFile(MemoryBufferR
>>        Res |= BasicSymbolRef::SF_Global;
>>        break;
>>      }
>> -    AsmSymbols.push_back(
>> -        std::make_pair<std::string, uint32_t>(Key, std::move(Res)));
>> +    AsmUndefinedRefs(Key, BasicSymbolRef::Flags(Res));
>>    }
>>  }
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160422/87a496eb/attachment.html>


More information about the llvm-commits mailing list