[llvm] r253343 - [llvm-rtdyld] Don't waste cycles invalidating instruction cache.
Duncan P. N. Exon Smith via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 17 11:01:03 PST 2015
> On 2015-Nov-17, at 10:31, Davide Italiano <davide at freebsd.org> wrote:
>
> On Tue, Nov 17, 2015 at 10:09 AM, Duncan P. N. Exon Smith
> <dexonsmith at apple.com> wrote:
>>
>>> On 2015-Nov-17, at 08:37, Davide Italiano via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>>
>>> Author: davide
>>> Date: Tue Nov 17 10:37:52 2015
>>> New Revision: 253343
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=253343&view=rev
>>> Log:
>>> [llvm-rtdyld] Don't waste cycles invalidating instruction cache.
>>>
>>> Now that setExecutable() changed to do all the ground work to make
>>> memory executable on the host, we can remove all (redundant) calls
>>> to invalidate instruction cache here.
>>>
>>> As an added bonus, this makes invalidateInstructionCache() dead
>>> code, so it can be removed.
>>>
>>> Differential Revision: http://reviews.llvm.org/D13631
>>>
>>> Modified:
>>> llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp
>>>
>>> Modified: llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp?rev=253343&r1=253342&r2=253343&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp (original)
>>> +++ llvm/trunk/tools/llvm-rtdyld/llvm-rtdyld.cpp Tue Nov 17 10:37:52 2015
>>> @@ -155,12 +155,6 @@ public:
>>>
>>> bool finalizeMemory(std::string *ErrMsg) override { return false; }
>>>
>>> - // Invalidate instruction cache for sections with execute permissions.
>>> - // Some platforms with separate data cache and instruction cache require
>>> - // explicit cache flush, otherwise JIT code manipulations (like resolved
>>> - // relocations) will get to the data cache but not to the instruction cache.
>>> - virtual void invalidateInstructionCache();
>>> -
>>> void addDummySymbol(const std::string &Name, uint64_t Addr) {
>>> DummyExterns[Name] = Addr;
>>> }
>>> @@ -244,14 +238,6 @@ uint8_t *TrivialMemoryManager::allocateD
>>> return (uint8_t*)MB.base();
>>> }
>>>
>>> -void TrivialMemoryManager::invalidateInstructionCache() {
>>> - for (auto &FM : FunctionMemory)
>>> - sys::Memory::InvalidateInstructionCache(FM.base(), FM.size());
>>> -
>>> - for (auto &DM : DataMemory)
>>> - sys::Memory::InvalidateInstructionCache(DM.base(), DM.size());
>>> -}
>>> -
>>> static const char *ProgramName;
>>>
>>> static void Message(const char *Type, const Twine &Msg) {
>>> @@ -424,12 +410,9 @@ static int executeInput() {
>>> }
>>> }
>>>
>>> - // Resolve all the relocations we can.
>>> - Dyld.resolveRelocations();
>>> - // Clear instruction cache before code will be executed.
>>> - MemMgr.invalidateInstructionCache();
>>> -
>>> + // Resove all the relocations we can.
>>> // FIXME: Error out if there are unresolved relocations.
>>> + Dyld.resolveRelocations();
>>>
>>> // Get the address of the entry point (_main by default).
>>> void *MainAddress = Dyld.getSymbolLocalAddress(EntryPoint);
>>> @@ -438,9 +421,10 @@ static int executeInput() {
>>>
>>> // Invalidate the instruction cache for each loaded function.
>>> for (auto &FM : MemMgr.FunctionMemory) {
>>> +
>>
>> Spurious blank line?
>>
>
> That was actually voluntary, but I'm not sure it's correct. I always
> leave one blank line before any comment -- it's an habit I have from
> working on other projects where it's an hard requirement. To be
> honest, I like this better, and this is the first time somebody
> noticed -- and I see there's inconsistency in the tree about this. If
> that bothers you, I'll change it, but I'd rather do a sweep all over
> this file to make it consistent, see e.g.
Blank line at the beginning of a scope is strange to me since
the indentation already suggests "new paragraph".
Does clang-format remove the line?
>>> - // Resolve all the relocations we can.
>>> - Dyld.resolveRelocations();
>>> - // Clear instruction cache before code will be executed.
>>> - MemMgr.invalidateInstructionCache();
>>> -
>>> + // Resove all the relocations we can.
>>> // FIXME: Error out if there are unresolved relocations.
>>> + Dyld.resolveRelocations();
>>>
>
> a couple of lines above.
This comment is not at the beginning of a scope, so I agree a
blank line is important. clang-format would certainly leave
this one alone.
> What do you think?
I prefer no blank line at the beginning of a scope (and IIRC,
clang-format agrees with me), but if you prefer it this way and
clang-format doesn't care, then I don't care much either :).
> --
> Davide
>
> "There are no solved problems; there are only problems that are more
> or less solved" -- Henri Poincare
More information about the llvm-commits
mailing list