[llvm-commits] [llvm] r142202 - /llvm/trunk/lib/CodeGen/MachineLICM.cpp
Devang Patel
dpatel at apple.com
Wed Oct 19 16:54:06 PDT 2011
On Oct 19, 2011, at 4:35 PM, Evan Cheng wrote:
> How about loads from constant pool and other such loads?
We have not found a way to confidently confirm safety of such speculative loads.
> See MachineInstr::isInvariantLoad()?
This is checked as part of whether this load is LICM'able or not.
-
Devang
>
> Evan
>
> On Oct 17, 2011, at 10:35 AM, Devang Patel wrote:
>
>> Author: dpatel
>> Date: Mon Oct 17 12:35:01 2011
>> New Revision: 142202
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=142202&view=rev
>> Log:
>> It is safe to speculate load from GOT. This fixes performance regression caused by r141689.
>>
>> Radar 10281206.
>>
>> Modified:
>> llvm/trunk/lib/CodeGen/MachineLICM.cpp
>>
>> Modified: llvm/trunk/lib/CodeGen/MachineLICM.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineLICM.cpp?rev=142202&r1=142201&r2=142202&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/MachineLICM.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/MachineLICM.cpp Mon Oct 17 12:35:01 2011
>> @@ -762,6 +762,21 @@
>> }
>> }
>>
>> +/// isLoadFromGOT - Return true if this machine instruction loads from
>> +/// global offset table.
>> +static bool isLoadFromGOT(MachineInstr &MI) {
>> + assert (MI.getDesc().mayLoad() && "Expected MI that loads!");
>> + for (MachineInstr::mmo_iterator I = MI.memoperands_begin(),
>> + E = MI.memoperands_end(); I != E; ++I) {
>> + if (const Value *V = (*I)->getValue()) {
>> + if (const PseudoSourceValue *PSV = dyn_cast<PseudoSourceValue>(V))
>> + if (PSV == PSV->getGOT())
>> + return true;
>> + }
>> + }
>> + return false;
>> +}
>> +
>> /// IsLICMCandidate - Returns true if the instruction may be a suitable
>> /// candidate for LICM. e.g. If the instruction is a call, then it's obviously
>> /// not safe to hoist it.
>> @@ -775,7 +790,8 @@
>> // it dominates all exiting blocks. If it doesn't, then there is a path out of
>> // the loop which does not execute this load, so we can't hoist it.
>> // Stores and side effects are already checked by isSafeToMove.
>> - if (I.getDesc().mayLoad() && !IsGuaranteedToExecute(I.getParent()))
>> + if (I.getDesc().mayLoad() && !isLoadFromGOT(I) &&
>> + !IsGuaranteedToExecute(I.getParent()))
>> return false;
>>
>> return true;
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list