[RISCV] Use binary search for RISCVLoadFPImm::getLoadFPImm.
authorCraig Topper <craig.topper@sifive.com>
Fri, 10 Mar 2023 08:02:04 +0000 (00:02 -0800)
committerCraig Topper <craig.topper@sifive.com>
Fri, 10 Mar 2023 08:02:35 +0000 (00:02 -0800)
The table is sorted so we can use a binary search instead of a
linear scan.

llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp

index cad0cb2..9ac8d05 100644 (file)
@@ -234,8 +234,9 @@ int RISCVLoadFPImm::getLoadFPImm(uint8_t Sign, uint8_t Exp, uint8_t Mantissa) {
     return 0;
 
   if (Sign == 0b0) {
-    auto EMI = llvm::find(LoadFPImmArr, std::make_pair(Exp, Mantissa));
-    if (EMI != std::end(LoadFPImmArr))
+    auto EMI = llvm::lower_bound(LoadFPImmArr, std::make_pair(Exp, Mantissa));
+    if (EMI != std::end(LoadFPImmArr) && EMI->first == Exp &&
+        EMI->second == Mantissa)
       return std::distance(std::begin(LoadFPImmArr), EMI) + 1;
   }