[llvm-commits] [llvm] r51934 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h include/llvm/CodeGen/LiveStackAnalysis.h include/llvm/CodeGen/MachineFrameInfo.h include/llvm/CodeGen/Passes.h lib/CodeGen/LLVMTargetMachine.cpp lib/CodeGen/LiveInterval.cpp lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/LiveStackAnalysis.cpp lib/CodeGen/RegAllocLinearScan.cpp lib/CodeGen/StackSlotColoring.cpp
Evan Cheng
evan.cheng at apple.com
Mon Jun 23 14:06:29 PDT 2008
On Jun 22, 2008, at 10:56 PM, Chris Lattner wrote:
> On Jun 4, 2008, at 2:18 AM, Evan Cheng wrote:
>> URL: http://llvm.org/viewvc/llvm-project?rev=51934&view=rev
>> Log:
>> Add a stack slot coloring pass. Not yet enabled.
>
> Very nice Evan,
>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original)
>> +++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Wed Jun 4
>> 04:18:41 2008
>> @@ -35,6 +35,7 @@
>> /// merge point), it contains ~0u,x. If the value number is not in
>> use, it
>> /// contains ~1u,x to indicate that the value # is not used.
>> /// def - Instruction # of the definition.
>> + /// - or reg # of the definition if it's a stack slot
>> liveinterval.
>> /// copy - Copy iff val# is defined by a copy; zero otherwise.
>> /// hasPHIKill - One or more of the kills are PHI nodes.
>> /// kills - Instruction # of the kills.
>> @@ -100,15 +101,16 @@
>> typedef SmallVector<LiveRange,4> Ranges;
>> typedef SmallVector<VNInfo*,4> VNInfoList;
>>
>> - unsigned reg; // the register of this interval
>> + bool isSS; // True if this represents a stack slot
>> + unsigned reg; // the register or stack slot of this
>> interval
>
> isSS? Why do you need this? You're bloating all LiveInterval's for
> this flag.
This is used in debugging dump. I have changed this to use the top bit
of "reg" instead.
>
>
>> +++ llvm/trunk/lib/CodeGen/StackSlotColoring.cpp Wed Jun 4
>> 04:18:41 2008
>> @@ -0,0 +1,271 @@
>> +//===-- StackSlotColoring.cpp - Sinking for machine instructions
>> ----------===//
>
> Plz update comment.
>
>> +#define DEBUG_TYPE "stackcoloring"
>> +#include "llvm/CodeGen/LiveStackAnalysis.h"
>> +#include "llvm/CodeGen/MachineFrameInfo.h"
>> +#include "llvm/CodeGen/Passes.h"
>
> Passes.h is the primary header for this file, please include it first.
>
>> +static cl::opt<bool>
>> +DisableSharing("no-stack-slot-sharing",
>> + cl::init(false), cl::Hidden,
>> + cl::desc("Surpress slot sharing during stack
>> coloring"));
>> +
>> +static cl::opt<int>
>> +DeleteLimit("slot-delete-limit", cl::init(-1), cl::Hidden,
>> + cl::desc("Stack coloring slot deletion limit"));
>
> What is DeleteLimit? Does DisableSharing disable the whole pass?
This option is used to debug coloring. Once the limit is reached, the
rest of the slots are not colored.
Evan
>
>
>> +/// Colorslots - Color all spill stack slots and rewrite all
>> frameindex machine
>> +/// operands in the function.
>> +bool StackSlotColoring::ColorSlots(MachineFunction &MF) {
>> + unsigned NumObjs = MFI->getObjectIndexEnd();
>> + std::vector<int> SlotMapping(NumObjs, -1);
>> + SlotMapping.resize(NumObjs, -1);
>
> Is the resize dead/redundant with the ctor?
>
> Overall, very nice.
>
> -Chris
More information about the llvm-commits
mailing list