================
@@ -2925,6 +2925,54 @@ bool RISCVDAGToDAGISel::SelectAddrRegImm(SDValue Addr, 
SDValue &Base,
   return true;
 }
 
+/// Similar to SelectAddrRegImm, except that the offset restricted for
+/// nine bits.
+bool RISCVDAGToDAGISel::SelectAddrRegImm9(SDValue Addr, SDValue &Base,
+                                          SDValue &Offset) {
+  if (SelectAddrFrameIndex(Addr, Base, Offset))
+    return true;
+
+  SDLoc DL(Addr);
+  MVT VT = Addr.getSimpleValueType();
+
+  if (CurDAG->isBaseWithConstantOffset(Addr)) {
+
+    int64_t CVal = cast<ConstantSDNode>(Addr.getOperand(1))->getSExtValue();
+    if (isUInt<9>(CVal)) {
+      Base = Addr.getOperand(0);
+
+      if (auto *FIN = dyn_cast<FrameIndexSDNode>(Base))
+        Base = CurDAG->getTargetFrameIndex(FIN->getIndex(), VT);
+      Offset = CurDAG->getSignedTargetConstant(CVal, DL, VT);
+      return true;
+    }
+
+    // Handle with 12 bit ofset  immediates with ADDI.
+    else if (Addr.getOpcode() == ISD::ADD &&
+             isa<ConstantSDNode>(Addr.getOperand(1))) {
+      int64_t CVal = cast<ConstantSDNode>(Addr.getOperand(1))->getSExtValue();
+      assert(!isUInt<9>(CVal) && "uimm9 not already handled?");
+
+      if (isUInt<12>(CVal)) {
+        Base = SDValue(CurDAG->getMachineNode(
+                           RISCV::ADDI, DL, VT, Addr.getOperand(0),
+                           CurDAG->getSignedTargetConstant(CVal, DL, VT)),
+                       0);
+        Offset = CurDAG->getTargetConstant(0, DL, VT);
+        return true;
+      }
+    }
+  }
+  // Immediates more than 12 bits i.e LUI,ADDI,ADD
+  if (selectConstantAddr(CurDAG, DL, VT, Subtarget, Addr, Base, Offset,
----------------
topperc wrote:

The IsPrefetch flag for SelectConstantAddr matches a 12-bit immediate with 5 0s 
in the LSBs. That's not what you want for your instruction.

https://github.com/llvm/llvm-project/pull/145647
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to