mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Revert commit 149912 (lattner) and add a testcase that shows the problem (which
is that patterns no longer match for vectors of booleans, because you only get ConstantDataVector when the vector element type is i8, i16, etc, not when it is i1). Original commit message: Remove some dead code and tidy things up now that vectors use ConstantDataVector instead of always using ConstantVector. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150246 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c667ba69ac
commit
edfb931edb
@ -98,6 +98,13 @@ struct apint_match {
|
||||
Res = &CI->getValue();
|
||||
return true;
|
||||
}
|
||||
// FIXME: Remove this.
|
||||
if (ConstantVector *CV = dyn_cast<ConstantVector>(V))
|
||||
if (ConstantInt *CI =
|
||||
dyn_cast_or_null<ConstantInt>(CV->getSplatValue())) {
|
||||
Res = &CI->getValue();
|
||||
return true;
|
||||
}
|
||||
if (ConstantDataVector *CV = dyn_cast<ConstantDataVector>(V))
|
||||
if (ConstantInt *CI =
|
||||
dyn_cast_or_null<ConstantInt>(CV->getSplatValue())) {
|
||||
@ -144,6 +151,10 @@ struct cst_pred_ty : public Predicate {
|
||||
bool match(ITy *V) {
|
||||
if (const ConstantInt *CI = dyn_cast<ConstantInt>(V))
|
||||
return this->isValue(CI->getValue());
|
||||
// FIXME: Remove this.
|
||||
if (const ConstantVector *CV = dyn_cast<ConstantVector>(V))
|
||||
if (ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CV->getSplatValue()))
|
||||
return this->isValue(CI->getValue());
|
||||
if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(V))
|
||||
if (ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CV->getSplatValue()))
|
||||
return this->isValue(CI->getValue());
|
||||
@ -165,6 +176,14 @@ struct api_pred_ty : public Predicate {
|
||||
return true;
|
||||
}
|
||||
|
||||
// FIXME: remove.
|
||||
if (const ConstantVector *CV = dyn_cast<ConstantVector>(V))
|
||||
if (ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CV->getSplatValue()))
|
||||
if (this->isValue(CI->getValue())) {
|
||||
Res = &CI->getValue();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(V))
|
||||
if (ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CV->getSplatValue()))
|
||||
if (this->isValue(CI->getValue())) {
|
||||
@ -613,7 +632,9 @@ struct not_match {
|
||||
}
|
||||
private:
|
||||
bool matchIfNot(Value *LHS, Value *RHS) {
|
||||
return (isa<ConstantInt>(RHS) || isa<ConstantDataVector>(RHS)) &&
|
||||
return (isa<ConstantInt>(RHS) || isa<ConstantDataVector>(RHS) ||
|
||||
// FIXME: Remove CV.
|
||||
isa<ConstantVector>(RHS)) &&
|
||||
cast<Constant>(RHS)->isAllOnesValue() &&
|
||||
L.match(LHS);
|
||||
}
|
||||
|
@ -406,3 +406,12 @@ define i1 @mul3(i32 %X, i32 %Y) {
|
||||
ret i1 %C
|
||||
; CHECK: ret i1 true
|
||||
}
|
||||
|
||||
define <2 x i1> @vectorselect1(<2 x i1> %cond) {
|
||||
; CHECK: @vectorselect1
|
||||
%invert = xor <2 x i1> %cond, <i1 1, i1 1>
|
||||
%s = select <2 x i1> %invert, <2 x i32> <i32 0, i32 0>, <2 x i32> <i32 1, i32 1>
|
||||
%c = icmp ne <2 x i32> %s, <i32 0, i32 0>
|
||||
ret <2 x i1> %c
|
||||
; CHECK: ret <2 x i1> %cond
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user