[llvm] [GlobalISel] Fold G_ICMP if possible (PR #86357)

Amara Emerson via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 25 10:44:07 PDT 2024


================
@@ -996,6 +996,74 @@ llvm::ConstantFoldCTLZ(Register Src, const MachineRegisterInfo &MRI) {
   return std::nullopt;
 }
 
+std::optional<SmallVector<APInt>>
+llvm::ConstantFoldICmp(unsigned Pred, const Register Op1, const Register Op2,
+                       const MachineRegisterInfo &MRI) {
+  LLT Ty = MRI.getType(Op1);
+  if (Ty != MRI.getType(Op2))
+    return std::nullopt;
+
+  auto TryFoldScalar = [&MRI, Pred](Register LHS,
+                                    Register RHS) -> std::optional<APInt> {
+    auto LHSCst = getIConstantVRegVal(LHS, MRI);
----------------
aemerson wrote:

I'm not 100 sure how this is happening but it feels like the client of MIRBuilder should be creating new vregs and COPYing later to avoid creating multiple defs.

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


More information about the llvm-commits mailing list