[llvm-commits] minor vector comparison patch
Nate Begeman
natebegeman at mac.com
Mon Jul 28 11:06:07 PDT 2008
I reviewed it and checked it in.
On Jul 28, 2008, at 10:59 AM, Evan Cheng wrote:
> I am not a good person to review this. FP math always confuse me. :-)
> Dan, can you take a look?
>
> Thanks,
>
> Evan
>
> On Jul 25, 2008, at 11:32 AM, Mon P Wang wrote:
>
>> Hi,
>>
>> Here is a minor patch to add support for some floating point
>> comparison cases that we missed.
>>
>> -- Mon Ping
>>
>>
>> Index: lib/Target/X86/X86ISelLowering.cpp
>> ===================================================================
>> --- lib/Target/X86/X86ISelLowering.cpp (revision 54030)
>> +++ lib/Target/X86/X86ISelLowering.cpp (working copy)
>> @@ -4772,6 +4772,7 @@
>>
>> switch (SetCCOpcode) {
>> default: break;
>> + case ISD::SETOEQ:
>> case ISD::SETEQ: SSECC = 0; break;
>> case ISD::SETOGT:
>> case ISD::SETGT: Swap = true; // Fallthrough
>> @@ -4782,7 +4783,7 @@
>> case ISD::SETLE:
>> case ISD::SETOLE: SSECC = 2; break;
>> case ISD::SETUO: SSECC = 3; break;
>> - case ISD::SETONE:
>> + case ISD::SETUNE:
>> case ISD::SETNE: SSECC = 4; break;
>> case ISD::SETULE: Swap = true;
>> case ISD::SETUGE: SSECC = 5; break;
>> @@ -4795,13 +4796,19 @@
>>
>> // In the one special case we can't handle, emit two comparisons.
>> if (SSECC == 8) {
>> - SDOperand UNORD, EQ;
>> -
>> - assert(SetCCOpcode == ISD::SETUEQ && "Illegal FP comparison");
>> -
>> - UNORD = DAG.getNode(Opc, VT, Op0, Op1, DAG.getConstant(3,
>> MVT::i8));
>> - EQ = DAG.getNode(Opc, VT, Op0, Op1, DAG.getConstant(0,
>> MVT::i8));
>> - return DAG.getNode(ISD::OR, VT, UNORD, EQ);
>> + if (SetCCOpcode == ISD::SETUEQ) {
>> + SDOperand UNORD, EQ;
>> + UNORD = DAG.getNode(Opc, VT, Op0, Op1, DAG.getConstant(3,
>> MVT::i8));
>> + EQ = DAG.getNode(Opc, VT, Op0, Op1, DAG.getConstant(0,
>> MVT::i8));
>> + return DAG.getNode(ISD::OR, VT, UNORD, EQ);
>> + }
>> + else if (SetCCOpcode == ISD::SETONE) {
>> + SDOperand ORD, NEQ;
>> + ORD = DAG.getNode(Opc, VT, Op0, Op1, DAG.getConstant(7,
>> MVT::i8));
>> + NEQ = DAG.getNode(Opc, VT, Op0, Op1, DAG.getConstant(4,
>> MVT::i8));
>> + return DAG.getNode(ISD::AND, VT, ORD, NEQ);
>> + }
>> + assert(0 && "Illegal FP comparison");
>> }
>> // Handle all other FP comparisons here.
>> return DAG.getNode(Opc, VT, Op0, Op1, DAG.getConstant(SSECC,
>> MVT::i8));
>>
>> _______________________________________________
>> 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
More information about the llvm-commits
mailing list