[llvm] r299213 - [SystemZ] Skip DAGCombining of vector node for older subtargets.

Jonas Paulsson via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 31 06:22:59 PDT 2017


Author: jonpa
Date: Fri Mar 31 08:22:59 2017
New Revision: 299213

URL: http://llvm.org/viewvc/llvm-project?rev=299213&view=rev
Log:
[SystemZ]  Skip DAGCombining of vector node for older subtargets.

Even on older subtargets that lack vector support, there may be vector values
with just one element in the input program. These are converted during DAG
legalization to scalar values.

The pre-legalize SystemZ DAGCombiner methods should in this circumstance not
touch these nodes. This patch adds a check for this in
SystemZTargetLowering::combineEXTRACT_VECTOR_ELT().

Review: Ulrich Weigand

Added:
    llvm/trunk/test/CodeGen/SystemZ/extract-vector-elt-zEC12.ll
Modified:
    llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp

Modified: llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp?rev=299213&r1=299212&r2=299213&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp Fri Mar 31 08:22:59 2017
@@ -4999,6 +4999,12 @@ SDValue SystemZTargetLowering::combineST
 
 SDValue SystemZTargetLowering::combineEXTRACT_VECTOR_ELT(
     SDNode *N, DAGCombinerInfo &DCI) const {
+
+  // <1 x ..> vectors may be present in the function even without vector
+  // support, which will be handled during legalization.
+  if (!Subtarget.hasVector())
+    return SDValue();
+
   // Try to simplify a vector extraction.
   if (auto *IndexN = dyn_cast<ConstantSDNode>(N->getOperand(1))) {
     SDValue Op0 = N->getOperand(0);

Added: llvm/trunk/test/CodeGen/SystemZ/extract-vector-elt-zEC12.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SystemZ/extract-vector-elt-zEC12.ll?rev=299213&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/SystemZ/extract-vector-elt-zEC12.ll (added)
+++ llvm/trunk/test/CodeGen/SystemZ/extract-vector-elt-zEC12.ll Fri Mar 31 08:22:59 2017
@@ -0,0 +1,21 @@
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=zEC12 | FileCheck %s
+;
+; Test that <1 x i8> is legalized properly without vector support.
+
+define void @autogen_SD18500(i8*) {
+; CHECK: .text
+BB:
+  %L5 = load i8, i8* %0
+  %I22 = insertelement <1 x i8> undef, i8 %L5, i32 0
+  %Cmp53 = icmp ule i1 undef, undef
+  br label %CF244
+
+CF244:                                            ; preds = %CF244, %BB
+  %Sl119 = select i1 %Cmp53, <1 x i8> %I22, <1 x i8> undef
+  %Cmp148 = fcmp une float 0x3E03A81780000000, 0x42D92DCD00000000
+  br i1 %Cmp148, label %CF244, label %CF241
+
+CF241:                                            ; preds = %CF241, %CF244
+  %Sl199 = select i1 true, <1 x i8> %Sl119, <1 x i8> zeroinitializer
+  br label %CF241
+}




More information about the llvm-commits mailing list