[llvm] [GlobalISel] add G_ROTL, G_ROTR to computeKnownBits (PR #166365)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 5 07:56:36 PST 2025


================
@@ -483,6 +483,25 @@ void GISelValueTracking::computeKnownBitsImpl(Register R, KnownBits &Known,
     Known = KnownBits::shl(LHSKnown, RHSKnown);
     break;
   }
+  case TargetOpcode::G_ROTL:
+  case TargetOpcode::G_ROTR: {
+    MachineInstr *AmtOpMI = MRI.getVRegDef(MI.getOperand(2).getReg());
+    auto MaybeAmtOp = isConstantOrConstantSplatVector(*AmtOpMI, MRI);
+    if (!MaybeAmtOp)
+      break;
+    unsigned Amt = MaybeAmtOp->urem(BitWidth);
+
+    Register SrcReg = MI.getOperand(1).getReg();
+    computeKnownBitsImpl(SrcReg, Known, DemandedElts, Depth + 1);
+
+    // Canonicalize to ROTR.
+    if (Opcode == TargetOpcode::G_ROTL)
----------------
arsenm wrote:

```suggestion
    Register SrcReg = MI.getOperand(1).getReg();
    computeKnownBitsImpl(SrcReg, Known, DemandedElts, Depth + 1);

    unsigned Amt = MaybeAmtOp->urem(BitWidth);
     
    // Canonicalize to ROTR.
    if (Opcode == TargetOpcode::G_ROTL)
```

https://github.com/llvm/llvm-project/pull/166365


More information about the llvm-commits mailing list