[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