[llvm-commits] [llvm] r164835 - /llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
Manman Ren
mren at apple.com
Fri Sep 28 12:44:26 PDT 2012
Oops, forgot to add a testing case.
Will do.
Manman
On Sep 28, 2012, at 12:42 PM, Benjamin Kramer <benny.kra at gmail.com> wrote:
>
> On 28.09.2012, at 20:53, Manman Ren <mren at apple.com> wrote:
>
>> Author: mren
>> Date: Fri Sep 28 13:53:24 2012
>> New Revision: 164835
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=164835&view=rev
>> Log:
>> X86: when replacing SUB with TEST in ISelDAGToDAG, only replace uses of the
>> second output of SUB with first output of TEST.
>>
>> PR13966
>
> test case?
>
> - Ben
>
>>
>> Modified:
>> llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
>>
>> Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=164835&r1=164834&r2=164835&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original)
>> +++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Fri Sep 28 13:53:24 2012
>> @@ -2525,7 +2525,13 @@
>> MVT::i8, Reg);
>>
>> // Emit a testb.
>> - return CurDAG->getMachineNode(X86::TEST8ri, dl, MVT::i32, Subreg, Imm);
>> + SDNode *NewNode = CurDAG->getMachineNode(X86::TEST8ri, dl, MVT::i32,
>> + Subreg, Imm);
>> + // Replace SUB|CMP with TEST, since SUB has two outputs while TEST has
>> + // one, do not call ReplaceAllUsesWith.
>> + ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
>> + SDValue(NewNode, 0));
>> + return NULL;
>> }
>>
>> // For example, "testl %eax, $2048" to "testb %ah, $8".
>> @@ -2556,8 +2562,13 @@
>> // Emit a testb. The EXTRACT_SUBREG becomes a COPY that can only
>> // target GR8_NOREX registers, so make sure the register class is
>> // forced.
>> - return CurDAG->getMachineNode(X86::TEST8ri_NOREX, dl, MVT::i32,
>> - Subreg, ShiftedImm);
>> + SDNode *NewNode = CurDAG->getMachineNode(X86::TEST8ri_NOREX, dl,
>> + MVT::i32, Subreg, ShiftedImm);
>> + // Replace SUB|CMP with TEST, since SUB has two outputs while TEST has
>> + // one, do not call ReplaceAllUsesWith.
>> + ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
>> + SDValue(NewNode, 0));
>> + return NULL;
>> }
>>
>> // For example, "testl %eax, $32776" to "testw %ax, $32776".
>> @@ -2573,7 +2584,13 @@
>> MVT::i16, Reg);
>>
>> // Emit a testw.
>> - return CurDAG->getMachineNode(X86::TEST16ri, dl, MVT::i32, Subreg, Imm);
>> + SDNode *NewNode = CurDAG->getMachineNode(X86::TEST16ri, dl, MVT::i32,
>> + Subreg, Imm);
>> + // Replace SUB|CMP with TEST, since SUB has two outputs while TEST has
>> + // one, do not call ReplaceAllUsesWith.
>> + ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
>> + SDValue(NewNode, 0));
>> + return NULL;
>> }
>>
>> // For example, "testq %rax, $268468232" to "testl %eax, $268468232".
>> @@ -2589,7 +2606,13 @@
>> MVT::i32, Reg);
>>
>> // Emit a testl.
>> - return CurDAG->getMachineNode(X86::TEST32ri, dl, MVT::i32, Subreg, Imm);
>> + SDNode *NewNode = CurDAG->getMachineNode(X86::TEST32ri, dl, MVT::i32,
>> + Subreg, Imm);
>> + // Replace SUB|CMP with TEST, since SUB has two outputs while TEST has
>> + // one, do not call ReplaceAllUsesWith.
>> + ReplaceUses(SDValue(Node, (Opcode == X86ISD::SUB ? 1 : 0)),
>> + SDValue(NewNode, 0));
>> + return NULL;
>> }
>> }
>> break;
>>
>>
>> _______________________________________________
>> 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