mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
fix PR13577, an issue introduced by r161687
- FCMOV only supports a subset of X86 conditions. Skip boolean simplification if X86 condition is not valid for FCMOV. - add a minimal test case for PR13577. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161732 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
235e2e6f0d
commit
9eac20ac88
@ -13843,6 +13843,22 @@ static SDValue BoolTestSetCCCombine(SDValue Cmp, X86::CondCode &CC) {
|
||||
return SetCC.getOperand(1);
|
||||
}
|
||||
|
||||
static bool IsValidFCMOVCondition(X86::CondCode CC) {
|
||||
switch (CC) {
|
||||
default:
|
||||
return false;
|
||||
case X86::COND_B:
|
||||
case X86::COND_BE:
|
||||
case X86::COND_E:
|
||||
case X86::COND_P:
|
||||
case X86::COND_AE:
|
||||
case X86::COND_A:
|
||||
case X86::COND_NE:
|
||||
case X86::COND_NP:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// Optimize X86ISD::CMOV [LHS, RHS, CONDCODE (e.g. X86::COND_NE), CONDVAL]
|
||||
static SDValue PerformCMOVCombine(SDNode *N, SelectionDAG &DAG,
|
||||
TargetLowering::DAGCombinerInfo &DCI) {
|
||||
@ -13871,7 +13887,9 @@ static SDValue PerformCMOVCombine(SDNode *N, SelectionDAG &DAG,
|
||||
SDValue Flags;
|
||||
|
||||
Flags = BoolTestSetCCCombine(Cond, CC);
|
||||
if (Flags.getNode()) {
|
||||
if (Flags.getNode() &&
|
||||
// Extra check as FCMOV only supports a subset of X86 cond.
|
||||
(FalseOp.getValueType() != MVT::f80 || IsValidFCMOVCondition(CC))) {
|
||||
SDValue Ops[] = { FalseOp, TrueOp,
|
||||
DAG.getConstant(CC, MVT::i8), Flags };
|
||||
return DAG.getNode(X86ISD::CMOV, DL, N->getVTList(),
|
||||
|
8
test/CodeGen/X86/pr13577.ll
Normal file
8
test/CodeGen/X86/pr13577.ll
Normal file
@ -0,0 +1,8 @@
|
||||
; RUN: llc < %s -march=x86-64
|
||||
|
||||
define x86_fp80 @foo(x86_fp80 %a) {
|
||||
%1 = tail call x86_fp80 @copysignl(x86_fp80 0xK7FFF8000000000000000, x86_fp80 %a) nounwind readnone
|
||||
ret x86_fp80 %1
|
||||
}
|
||||
|
||||
declare x86_fp80 @copysignl(x86_fp80, x86_fp80) nounwind readnone
|
Loading…
x
Reference in New Issue
Block a user