mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[SystemZ] Bugfix in SystemZTargetLowering::combineIntDIVREM()
Make sure to not unroll a vector division/remainder (with a constant splat divisor) after type legalization, since the scalar type may then be illegal. Review: Ulrich Weigand https://reviews.llvm.org/D62036 llvm-svn: 360965
This commit is contained in:
parent
1c61494df7
commit
4eafdd14d1
@ -5841,7 +5841,7 @@ SDValue SystemZTargetLowering::combineIntDIVREM(
|
||||
// since it is not Legal but Custom it can only happen before
|
||||
// legalization. Therefore we must scalarize this early before Combine
|
||||
// 1. For widened vectors, this is already the result of type legalization.
|
||||
if (VT.isVector() && isTypeLegal(VT) &&
|
||||
if (DCI.Level == BeforeLegalizeTypes && VT.isVector() && isTypeLegal(VT) &&
|
||||
DAG.isConstantIntBuildVectorOrConstantInt(N->getOperand(1)))
|
||||
return DAG.UnrollVectorOp(N);
|
||||
return SDValue();
|
||||
|
13
test/CodeGen/SystemZ/vec-rem.ll
Normal file
13
test/CodeGen/SystemZ/vec-rem.ll
Normal file
@ -0,0 +1,13 @@
|
||||
; Verify that we do not create illegal scalar urems after type legalization.
|
||||
;
|
||||
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13
|
||||
|
||||
define <16 x i8> @main(i16 %arg) {
|
||||
bb:
|
||||
%tmp6 = insertelement <16 x i16> undef, i16 %arg, i32 0
|
||||
%tmp7 = shufflevector <16 x i16> %tmp6, <16 x i16> undef, <16 x i32> zeroinitializer
|
||||
%tmp8 = insertelement <16 x i8> <i8 undef, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, i8 undef, i32 0
|
||||
%tmp11 = urem <16 x i16> %tmp7, <i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265, i16 29265>
|
||||
%tmp12 = trunc <16 x i16> %tmp11 to <16 x i8>
|
||||
ret <16 x i8> %tmp12
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user