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

Jay Foad via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 5 03:05:18 PST 2025


================
@@ -483,6 +483,27 @@ 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());
+    if (!AmtOpMI)
+      break;
+    auto MaybeAmtOp = isConstantOrConstantSplatVector(*AmtOpMI, MRI);
+    if (MaybeAmtOp.has_value()) {
+      unsigned Amt = MaybeAmtOp.value().urem(BitWidth);
+
+      Register SrcReg = MI.getOperand(1).getReg();
+      computeKnownBitsImpl(SrcReg, Known, DemandedElts, Depth + 1);
+
+      // Canonicalize to ROTR.
+      if (Opcode == TargetOpcode::G_ROTL && Amt != 0)
----------------
jayfoad wrote:

Simpler:
```suggestion
      if (Opcode == TargetOpcode::G_ROTL)
```

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


More information about the llvm-commits mailing list