[llvm] r245535 - [PowerPC] Fix value type on XVCMPEQDP for v2f64 comparisons

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 20 09:06:41 PDT 2015


Merged in r245574.

Cheers,
Hans

On Wed, Aug 19, 2015 at 8:33 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> Hi Hans,
>
> This one too please.
>
> Thanks again,
> Hal
>
> ----- Original Message -----
>> From: "Hal Finkel via llvm-commits" <llvm-commits at lists.llvm.org>
>> To: llvm-commits at lists.llvm.org
>> Sent: Wednesday, August 19, 2015 10:02:02 PM
>> Subject: [llvm] r245535 - [PowerPC] Fix value type on XVCMPEQDP for v2f64 comparisons
>>
>> Author: hfinkel
>> Date: Wed Aug 19 22:02:02 2015
>> New Revision: 245535
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=245535&view=rev
>> Log:
>> [PowerPC] Fix value type on XVCMPEQDP for v2f64 comparisons
>>
>> XVCMPEQDP is used for VSX v2f64 equality comparisons, but the value
>> type needs
>> to be v2i64 (as that's the corresponding SETCC type).
>>
>> Fixes PR24225.
>>
>> Added:
>>     llvm/trunk/test/CodeGen/PowerPC/xvcmpeqdp-v2f64.ll
>> Modified:
>>     llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
>>
>> Modified: llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp?rev=245535&r1=245534&r2=245535&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp (original)
>> +++ llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp Wed Aug 19
>> 22:02:02 2015
>> @@ -2305,14 +2305,15 @@ SDNode *PPCDAGToDAGISel::SelectSETCC(SDN
>>      if (Swap)
>>        std::swap(LHS, RHS);
>>
>> +    EVT ResVT = VecVT.changeVectorElementTypeToInteger();
>>      if (Negate) {
>> -      SDValue VCmp(CurDAG->getMachineNode(VCmpInst, dl, VecVT, LHS,
>> RHS), 0);
>> +      SDValue VCmp(CurDAG->getMachineNode(VCmpInst, dl, ResVT, LHS,
>> RHS), 0);
>>        return CurDAG->SelectNodeTo(N, PPCSubTarget->hasVSX() ?
>>        PPC::XXLNOR :
>>                                                                PPC::VNOR,
>> -                                  VecVT, VCmp, VCmp);
>> +                                  ResVT, VCmp, VCmp);
>>      }
>>
>> -    return CurDAG->SelectNodeTo(N, VCmpInst, VecVT, LHS, RHS);
>> +    return CurDAG->SelectNodeTo(N, VCmpInst, ResVT, LHS, RHS);
>>    }
>>
>>    if (PPCSubTarget->useCRBits())
>>
>> Added: llvm/trunk/test/CodeGen/PowerPC/xvcmpeqdp-v2f64.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/xvcmpeqdp-v2f64.ll?rev=245535&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/PowerPC/xvcmpeqdp-v2f64.ll (added)
>> +++ llvm/trunk/test/CodeGen/PowerPC/xvcmpeqdp-v2f64.ll Wed Aug 19
>> 22:02:02 2015
>> @@ -0,0 +1,38 @@
>> +; RUN: llc < %s | FileCheck %s
>> +target datalayout = "e-m:e-i64:64-n32:64"
>> +target triple = "powerpc64le-unknown-linux-gnu"
>> +
>> +; Function Attrs: nounwind
>> +define void @__fmax_double3_3D_exec() #0 {
>> +entry:
>> +  br i1 undef, label %if.then.i, label %fmax_double3.exit
>> +
>> +if.then.i:                                        ; preds = %entry
>> +  %cmp24.i.i = fcmp ord <3 x double> undef, zeroinitializer
>> +  %sext25.i.i = sext <3 x i1> %cmp24.i.i to <3 x i64>
>> +  %neg.i.i = xor <3 x i64> %sext25.i.i, <i64 -1, i64 -1, i64 -1>
>> +  %or.i.i = or <3 x i64> undef, %neg.i.i
>> +  %neg.i.i.i = select <3 x i1> undef, <3 x i64> zeroinitializer, <3
>> x i64> %sext25.i.i
>> +  %and.i.i.i = and <3 x i64> undef, %neg.i.i.i
>> +  %and26.i.i.i = and <3 x i64> undef, %or.i.i
>> +  %or.i.i.i = or <3 x i64> %and.i.i.i, %and26.i.i.i
>> +  %astype32.i.i.i = bitcast <3 x i64> %or.i.i.i to <3 x double>
>> +  %extractVec33.i.i.i = shufflevector <3 x double> %astype32.i.i.i,
>> <3 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
>> +  store <4 x double> %extractVec33.i.i.i, <4 x double>* undef, align
>> 32
>> +  br label %fmax_double3.exit
>> +
>> +; CHECK-LABEL: @__fmax_double3_3D_exec
>> +; CHECK: xvcmpeqdp
>> +
>> +fmax_double3.exit:                                ; preds =
>> %if.then.i, %entry
>> +  br i1 undef, label %if.then, label %do.end
>> +
>> +if.then:                                          ; preds =
>> %fmax_double3.exit
>> +  unreachable
>> +
>> +do.end:                                           ; preds =
>> %fmax_double3.exit
>> +  ret void
>> +}
>> +
>> +attributes #0 = { nounwind }
>> +
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory


More information about the llvm-commits mailing list