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

Hal Finkel via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 19 20:33:00 PDT 2015


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