[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:02:02 PDT 2015
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 }
+
More information about the llvm-commits
mailing list