[llvm-commits] [llvm] r40520 - in /llvm/trunk: include/llvm/CodeGen/ScheduleDAG.h lib/CodeGen/SelectionDAG/ScheduleDAG.cpp

Evan Cheng evan.cheng at apple.com
Fri Jul 27 13:28:57 PDT 2007


On Jul 27, 2007, at 12:30 PM, Christopher Lamb wrote:

>
> On Jul 27, 2007, at 12:07 PM, Evan Cheng wrote:
>
>>
>> On Jul 26, 2007, at 11:52 PM, Christopher Lamb wrote:
>>
>>>
>>> On Jul 26, 2007, at 10:28 PM, Evan Cheng wrote:
>>>
>>>> I don't think they are target opcodes.
>>>
>>> Is that a suggestion? In the implementation they are:
>>>
>>> --- llvm/trunk/include/llvm/Target/TargetInstrInfo.h (original)
>>> +++ llvm/trunk/include/llvm/Target/TargetInstrInfo.h Thu Jul 26  
>>> 02:48:21 2007
>>> @@ -177,7 +177,9 @@
>>>    enum {
>>>      PHI = 0,
>>>      INLINEASM = 1,
>>> -    LABEL = 2
>>> +    LABEL = 2,
>>> +    EXTRACT_SUBREG = 3,
>>> +    INSERT_SUBREG = 4
>>>    };
>>>
>>
>> Ah, I see. Although I don't think this is necessary especially  
>> since they will be eliminated eventually. Can you treat them the  
>> same way as CopyToReg and CopyFromReg?
>
> Unfortunately not. CopyToReg and CopyFromReg are selected to native  
> target instructions in SelectionDAG. The point of EXTRACT_SUBREG  
> and INSERT_SUBREG is that they exist until (or even through)  
> register allocation. These machine instructions carry information  
> about which subregister and/or superregister is involved in the  
> operation and cannot be eliminated until that information is no  
> longer needed, either in coalescing or in the LowerSubregs pass.
>
>> Just add the operands to isel queue and don't select to a new  
>> node. If that works, we can remove  
>> TargetInstrInfo::EXTRACT_SUBREG, etc.
>
> This is counter to the approach that we discussed at the meeting at  
> Apple. The decision was to have insert/extract machine instructions  
> to track the information through register allocation. Selecting the  
> operands and not emitting a node would end up with wrong live  
> ranges, as LV/LI have no clue that the vregs involved are aliasing.  
> I've tried an approach that affects something similar to what you  
> describe, it involves using the wrong class for instructions (see  
> http://llvm.org/bugs/show_bug.cgi?id=1350 comment #9). This  
> approach depended on the subreg index on all MachineInstrs which we  
> decided to remove, and IIRC it was decided that this was generally  
> "not the way".

Ok, I'd forgotten each MI does need a TargetInstrDescriptor so it  
cannot reuse ISD::EXTRACT_SUBREG. Never mind. Sorry about the  
confusion. :-)

Evan

>
> --
> Chris
>
>>>> These are similar to phi, copyfromreg, etc.
>>>
>>> Not quite. The copyfrom/to reg and inlineasm nodes are ISD DAG  
>>> nodes and are actually ISel'd in ScheduleDAG to the  
>>> TargetInstrInfo types.
>>>
>>>> Target opcodes are those that are target specific, I.e. not  
>>>> shared between targets.
>>>
>>> They're part of the low instruction numbers for all targets.
>>> --
>>> Chris
>>>
>>>> On Jul 26, 2007, at 8:36 PM, Christopher Lamb  
>>>> <christopher.lamb at gmail.com> wrote:
>>>>
>>>>>
>>>>> On Jul 26, 2007, at 6:27 PM, Evan Cheng wrote:
>>>>>
>>>>>>
>>>>>> On Jul 26, 2007, at 1:12 AM, Christopher Lamb wrote:
>>>>>>
>>>>>>>  /// EmitNode - Generate machine code for an node and needed  
>>>>>>> dependencies.
>>>>>>>  ///
>>>>>>>  void ScheduleDAG::EmitNode(SDNode *Node,
>>>>>>> @@ -436,6 +578,14 @@
>>>>>>>    // If machine instruction
>>>>>>>    if (Node->isTargetOpcode()) {
>>>>>>>      unsigned Opc = Node->getTargetOpcode();
>>>>>>> +
>>>>>>> +    // Handle subreg insert/extract specially
>>>>>>> +    if (Opc == TargetInstrInfo::EXTRACT_SUBREG ||
>>>>>>> +        Opc == TargetInstrInfo::INSERT_SUBREG) {
>>>>>>> +      EmitSubregNode(Node, VRBaseMap);
>>>>>>> +      return;
>>>>>>> +    }
>>>>>>> +
>>>>>>
>>>>>> Hi Chris,
>>>>>>
>>>>>> Is this right? EXTRACT_SUBREG and INSERT_SUBREG are not target  
>>>>>> opcodes.
>>>>>
>>>>> Actually, they are both DAG nodes and target opcodes. ISel  
>>>>> lowers the DAG nodes to target opcodes before schedule DAG sees  
>>>>> them.
>>>>> --
>>>>> Christopher Lamb
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> llvm-commits mailing list
>>>>> llvm-commits at cs.uiuc.edu
>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>
>>> --
>>> Christopher Lamb
>>>
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> --
> Christopher Lamb
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20070727/7a33ba63/attachment.html>


More information about the llvm-commits mailing list