diff --git a/llvm/lib/Target/RISCV/RISCVFeatures.td b/llvm/lib/Target/RISCV/RISCVFeatures.td index bf58226e0bd39..f74f1e06d66a2 100644 --- a/llvm/lib/Target/RISCV/RISCVFeatures.td +++ b/llvm/lib/Target/RISCV/RISCVFeatures.td @@ -1487,6 +1487,8 @@ def HasVendorXqcics : Predicate<"Subtarget->hasVendorXqcics()">, AssemblerPredicate<(all_of FeatureVendorXqcics), "'Xqcics' (Qualcomm uC Conditional Select Extension)">; +def NoVendorXqcics + : Predicate<"!Subtarget->hasVendorXqcics()">; def FeatureVendorXqcicsr : RISCVExperimentalExtension<0, 4, "Qualcomm uC CSR Extension">; diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td b/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td index 9e3eb1c03fb37..afb11998e9277 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td @@ -1484,12 +1484,16 @@ def : QCIMVCCPat ; def : QCIMVCCPat ; def : QCIMVCCPat ; -def : QCIMVCCIPat ; -def : QCIMVCCIPat ; def : QCIMVCCIPat ; def : QCIMVCCIPat ; } +// Prioritize Xqcics over these patterns. +let Predicates = [HasVendorXqcicm, NoVendorXqcics, IsRV32] in { +def : QCIMVCCIPat ; +def : QCIMVCCIPat ; +} + let Predicates = [HasVendorXqcics, IsRV32] in { def : Pat<(select (XLenVT GPRNoX0:$rd), (XLenVT GPRNoX0:$rs2),(XLenVT GPRNoX0:$rs3)), (QC_SELECTNEI GPRNoX0:$rd, (XLenVT 0), GPRNoX0:$rs2, GPRNoX0:$rs3)>; @@ -1498,12 +1502,8 @@ def : Pat<(select (XLenVT GPRNoX0:$rd), (XLenVT GPRNoX0:$rs2), simm5:$simm2), def : Pat<(select (XLenVT GPRNoX0:$rd), simm5:$simm2,(XLenVT GPRNoX0:$rs2)), (QC_SELECTIEQI GPRNoX0:$rd, (XLenVT 0), GPRNoX0:$rs2, simm5:$simm2)>; -// Below AddedComplexity is added to prefer these conditional select instructions over -// conditional move instructions -let AddedComplexity = 1 in { def : QCISELECTCCIPat ; def : QCISELECTCCIPat ; -} def : QCISELECTICCIPat ; def : QCISELECTICCIPat ;