GlobalISel: Fix narrowScalar for G_ANYEXT results

This is nearly the same as G_ZEXT.
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index 667e1a0..5588acd 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -680,7 +680,8 @@
     MI.eraseFromParent();
     return Legalized;
   }
-  case TargetOpcode::G_ZEXT: {
+  case TargetOpcode::G_ZEXT:
+  case TargetOpcode::G_ANYEXT: {
     if (TypeIdx != 0)
       return UnableToLegalize;
 
@@ -689,13 +690,18 @@
     if (SizeOp0 % SizeOp1 != 0)
       return UnableToLegalize;
 
+    Register PadReg;
+    if (MI.getOpcode() == TargetOpcode::G_ZEXT)
+      PadReg = MIRBuilder.buildConstant(SrcTy, 0).getReg(0);
+    else
+      PadReg = MIRBuilder.buildUndef(SrcTy).getReg(0);
+
     // Generate a merge where the bottom bits are taken from the source, and
-    // zero everything else.
-    Register ZeroReg = MIRBuilder.buildConstant(SrcTy, 0).getReg(0);
+    // zero/impdef everything else.
     unsigned NumParts = SizeOp0 / SizeOp1;
     SmallVector<Register, 4> Srcs = {MI.getOperand(1).getReg()};
     for (unsigned Part = 1; Part < NumParts; ++Part)
-      Srcs.push_back(ZeroReg);
+      Srcs.push_back(PadReg);
     MIRBuilder.buildMerge(MI.getOperand(0).getReg(), Srcs);
     MI.eraseFromParent();
     return Legalized;