[llvm] [GlobalISel] Combine G_ZEXT of undef -> 0 (PR #113764)

Thorsten Schütt via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 30 22:08:10 PDT 2024


================
@@ -2916,8 +2916,11 @@ void CombinerHelper::replaceInstWithFConstant(MachineInstr &MI, double C) {
 
 void CombinerHelper::replaceInstWithConstant(MachineInstr &MI, int64_t C) {
   assert(MI.getNumDefs() == 1 && "Expected only one def?");
-  Builder.buildConstant(MI.getOperand(0), C);
-  MI.eraseFromParent();
+  LLT DstTy = MRI.getType(MI.getOperand(0).getReg());
+  if (isConstantLegalOrBeforeLegalizer(DstTy)) {
----------------
tschuett wrote:

I prefer my solution. The legality check and the build are close together and easy to reason about.

Firstly, Helper.matchOperandIsUndef does not know whether we are combining into undef or constants. How can it reason about legality of uncertainty? Secondly, legality checks and build are spread wide afar, which makes it hard to reason about correctness.

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


More information about the llvm-commits mailing list