mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Fix an issue in SimplifySetCC() specific to vector comparisons.
When folding X == X we need to check getBooleanContents() to determine if the result is a vector of ones or a vector of negative ones. I tried creating a test case, but the problem seems to only be exposed on a much older version of clang (around r144500). rdar://10923049 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153966 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1895fc90e0
commit
9dbb018b36
@ -2432,8 +2432,16 @@ TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
||||
|
||||
if (N0 == N1) {
|
||||
// We can always fold X == X for integer setcc's.
|
||||
if (N0.getValueType().isInteger())
|
||||
return DAG.getConstant(ISD::isTrueWhenEqual(Cond), VT);
|
||||
if (N0.getValueType().isInteger()) {
|
||||
switch (getBooleanContents(N0.getValueType().isVector())) {
|
||||
default: llvm_unreachable ("Unknown boolean content.");
|
||||
case UndefinedBooleanContent:
|
||||
case ZeroOrOneBooleanContent:
|
||||
return DAG.getConstant(ISD::isTrueWhenEqual(Cond), VT);
|
||||
case ZeroOrNegativeOneBooleanContent:
|
||||
return DAG.getConstant(ISD::isTrueWhenEqual(Cond) ? -1 : 0, VT);
|
||||
}
|
||||
}
|
||||
unsigned UOF = ISD::getUnorderedFlavor(Cond);
|
||||
if (UOF == 2) // FP operators that are undefined on NaNs.
|
||||
return DAG.getConstant(ISD::isTrueWhenEqual(Cond), VT);
|
||||
|
Loading…
Reference in New Issue
Block a user