mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Fix several places to handle vector operands properly.
Based on a patch by Micah Villmow for PR6438. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97538 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
069d6f3396
commit
5b870aff81
@ -1064,7 +1064,7 @@ SDValue DAGCombiner::visitADD(SDNode *N) {
|
||||
if (VT.isInteger() && !VT.isVector()) {
|
||||
APInt LHSZero, LHSOne;
|
||||
APInt RHSZero, RHSOne;
|
||||
APInt Mask = APInt::getAllOnesValue(VT.getSizeInBits());
|
||||
APInt Mask = APInt::getAllOnesValue(VT.getScalarType().getSizeInBits());
|
||||
DAG.ComputeMaskedBits(N0, Mask, LHSZero, LHSOne);
|
||||
|
||||
if (LHSZero.getBoolValue()) {
|
||||
@ -1136,7 +1136,7 @@ SDValue DAGCombiner::visitADDC(SDNode *N) {
|
||||
// fold (addc a, b) -> (or a, b), CARRY_FALSE iff a and b share no bits.
|
||||
APInt LHSZero, LHSOne;
|
||||
APInt RHSZero, RHSOne;
|
||||
APInt Mask = APInt::getAllOnesValue(VT.getSizeInBits());
|
||||
APInt Mask = APInt::getAllOnesValue(VT.getScalarType().getSizeInBits());
|
||||
DAG.ComputeMaskedBits(N0, Mask, LHSZero, LHSOne);
|
||||
|
||||
if (LHSZero.getBoolValue()) {
|
||||
@ -2754,7 +2754,7 @@ SDValue DAGCombiner::visitSRL(SDNode *N) {
|
||||
if (N1C && N0.getOpcode() == ISD::CTLZ &&
|
||||
N1C->getAPIntValue() == Log2_32(VT.getSizeInBits())) {
|
||||
APInt KnownZero, KnownOne;
|
||||
APInt Mask = APInt::getAllOnesValue(VT.getSizeInBits());
|
||||
APInt Mask = APInt::getAllOnesValue(VT.getScalarType().getSizeInBits());
|
||||
DAG.ComputeMaskedBits(N0.getOperand(0), Mask, KnownZero, KnownOne);
|
||||
|
||||
// If any of the input bits are KnownOne, then the input couldn't be all
|
||||
|
@ -1080,8 +1080,8 @@ ExpandShiftWithKnownAmountBit(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
SDValue Amt = N->getOperand(1);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
EVT ShTy = Amt.getValueType();
|
||||
unsigned ShBits = ShTy.getSizeInBits();
|
||||
unsigned NVTBits = NVT.getSizeInBits();
|
||||
unsigned ShBits = ShTy.getScalarType().getSizeInBits();
|
||||
unsigned NVTBits = NVT.getScalarType().getSizeInBits();
|
||||
assert(isPowerOf2_32(NVTBits) &&
|
||||
"Expanded integer type size not a power of two!");
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
@ -1608,7 +1608,7 @@ static bool ValueHasExactlyOneBitSet(SDValue Val, const SelectionDAG &DAG) {
|
||||
|
||||
// Fall back to ComputeMaskedBits to catch other known cases.
|
||||
EVT OpVT = Val.getValueType();
|
||||
unsigned BitWidth = OpVT.getSizeInBits();
|
||||
unsigned BitWidth = OpVT.getScalarType().getSizeInBits();
|
||||
APInt Mask = APInt::getAllOnesValue(BitWidth);
|
||||
APInt KnownZero, KnownOne;
|
||||
DAG.ComputeMaskedBits(Val, Mask, KnownZero, KnownOne);
|
||||
|
@ -31,11 +31,10 @@ define <1 x i32> @f(<1 x i16> %a) nounwind {
|
||||
ret <1 x i32> %c
|
||||
}
|
||||
|
||||
; TODO: Legalize doesn't yet handle this.
|
||||
;define <8 x i16> @g(<8 x i32> %a) nounwind {
|
||||
; %c = trunc <8 x i32> %a to <8 x i16>
|
||||
; ret <8 x i16> %c
|
||||
;}
|
||||
define <8 x i16> @g(<8 x i32> %a) nounwind {
|
||||
%c = trunc <8 x i32> %a to <8 x i16>
|
||||
ret <8 x i16> %c
|
||||
}
|
||||
|
||||
define <3 x i16> @h(<3 x i32> %a) nounwind {
|
||||
%c = trunc <3 x i32> %a to <3 x i16>
|
||||
@ -46,3 +45,12 @@ define <1 x i16> @i(<1 x i32> %a) nounwind {
|
||||
%c = trunc <1 x i32> %a to <1 x i16>
|
||||
ret <1 x i16> %c
|
||||
}
|
||||
|
||||
; PR6438
|
||||
define void @__OpenCL_math_kernel4_kernel() nounwind {
|
||||
%tmp12.i = and <4 x i32> zeroinitializer, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040> ; <<4 x i32>> [#uses=1]
|
||||
%cmp13.i = icmp eq <4 x i32> %tmp12.i, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040> ; <<4 x i1>> [#uses=2]
|
||||
%cmp.ext14.i = sext <4 x i1> %cmp13.i to <4 x i32> ; <<4 x i32>> [#uses=0]
|
||||
%tmp2110.i = and <4 x i1> %cmp13.i, zeroinitializer ; <<4 x i1>> [#uses=0]
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user