[PATCH] D157113: [AArch64] Support more types for ZEXT/SEXT with Global Isel

Amara Emerson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 15 13:24:53 PDT 2023


aemerson accepted this revision.
aemerson added a comment.
This revision is now accepted and ready to land.

A few comments but otherwise LGTM, thanks for the new tests.



================
Comment at: llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp:5951-5952
+    // zext x -> zext(merge(zext(unmerge), zext(unmerge)))
+    Register MidRegister = MRI.createGenericVirtualRegister(MidTy);
+    MIRBuilder.buildInstr(MI.getOpcode(), {MidRegister}, {Src});
+    // Unmerge the vector
----------------
No need for `MidRegister`, this can be simplified to:
```
auto NewExt = MIRBuilder.buildInstr(MI.getOpcode(), {MidTy}, {Src});
...
auto UnmergeSrc = MIRBuilder.buildUnmerge(EltTy, NewExt);
...`


================
Comment at: llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp:5958-5966
+    // ZExt the vectors
+    Register ZExtRes1 =
+        MRI.createGenericVirtualRegister(DstTy.changeElementCount(
+            DstTy.getElementCount().divideCoefficientBy(2)));
+    Register ZExtRes2 =
+        MRI.createGenericVirtualRegister(MRI.getType(ZExtRes1));
+
----------------
Same here, it's less verbose to just create the LLTs and pass those to `buildInstr()` instead of passing Registers.
```
// ZExt the vectors
Register ZExtResTy = DstTy.changeElementCount(DstTy.getElementCount().divideCoefficientBy(2));
auto ZExtRes1 = MIRBuilder.buildInstr(MI.getOpcode(), {ZExtResTy}, {UnmergeSrc.getReg(0)});
auto ZExtRes2 = MIRBuilder.buildInstr(MI.getOpcode(), {ZExtResTy}, {UnmergeSrc.getReg(1)});
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D157113/new/

https://reviews.llvm.org/D157113



More information about the llvm-commits mailing list