From a454651c3946fd8e59665dfd2bb4402a9ba749c4 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Fri, 11 Jul 2025 15:40:46 -0700 Subject: [PATCH] [RISCV] Use Predicates instead of Added Complexity to prefer QC_SELECTEQI over QC_MVEQI. NFC IMHO AddedComplexity should be used as a last resort. We should use other mechanism like Predicates and PatFrag predicates to give priority. --- llvm/lib/Target/RISCV/RISCVFeatures.td | 2 ++ llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) 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 ;