[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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299213 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jonas Paulsson 2017-03-31 13:22:59 +00:00
parent 5f4e285a08
commit 1f79e38e07
2 changed files with 27 additions and 0 deletions

View File

@ -4999,6 +4999,12 @@ SDValue SystemZTargetLowering::combineSTORE(
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);

View File

@ -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
}