GlobalISel: Avoid unnecessary truncation to i64
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Sat, 20 Mar 2021 17:42:17 +0000 (13:42 -0400)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Sun, 21 Mar 2021 14:07:41 +0000 (10:07 -0400)
We can just directly pass through the APInt to create a new constant.

llvm/lib/CodeGen/GlobalISel/CSEMIRBuilder.cpp

index 2c86f06..82942b9 100644 (file)
@@ -189,7 +189,7 @@ MachineInstrBuilder CSEMIRBuilder::buildInstr(unsigned Opc,
     assert(DstOps.size() == 1 && "Invalid dsts");
     if (Optional<APInt> Cst = ConstantFoldBinOp(Opc, SrcOps[0].getReg(),
                                                 SrcOps[1].getReg(), *getMRI()))
-      return buildConstant(DstOps[0], Cst->getSExtValue());
+      return buildConstant(DstOps[0], *Cst);
     break;
   }
   case TargetOpcode::G_SEXT_INREG: {
@@ -200,7 +200,7 @@ MachineInstrBuilder CSEMIRBuilder::buildInstr(unsigned Opc,
     const SrcOp &Src1 = SrcOps[1];
     if (auto MaybeCst =
             ConstantFoldExtOp(Opc, Src0.getReg(), Src1.getImm(), *getMRI()))
-      return buildConstant(Dst, MaybeCst->getSExtValue());
+      return buildConstant(Dst, *MaybeCst);
     break;
   }
   }