[all-commits] [llvm/llvm-project] 45f51f: [AArch64][GlobalISel] Select UMULL instruction (#6...

chuongg3 via All-commits all-commits at lists.llvm.org
Mon Sep 25 01:35:04 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 45f51f9f7c5bc36f0f91695bb5e600013c2114ec
      https://github.com/llvm/llvm-project/commit/45f51f9f7c5bc36f0f91695bb5e600013c2114ec
  Author: chuongg3 <chuong.goh at arm.com>
  Date:   2023-09-25 (Mon, 25 Sep 2023)

  Changed paths:
    M llvm/lib/Target/AArch64/AArch64Combine.td
    M llvm/lib/Target/AArch64/AArch64InstrGISel.td
    M llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
    M llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp
    M llvm/test/CodeGen/AArch64/GlobalISel/legalize-mul.mir
    M llvm/test/CodeGen/AArch64/GlobalISel/legalize-rem.mir
    M llvm/test/CodeGen/AArch64/GlobalISel/legalizer-info-validation.mir
    M llvm/test/CodeGen/AArch64/aarch64-smull.ll
    M llvm/test/CodeGen/AArch64/aarch64-wide-mul.ll

  Log Message:
  -----------
  [AArch64][GlobalISel] Select UMULL instruction (#65469)

Global ISel now selects `UMULL` and `UMULL2` instructions.
G_MUL instruction with input operands coming from `SEXT` or `ZEXT`
operations are turned into UMULL

G_MUL instructions with v2s64 result type is always scalarised except: 
`mul ( unmerge( ext ), unmerge( ext ))` 

So the extend could be unmerged and fold away the unmerge in the middle:
`mul ( unmerge( ext ), unmerge( ext ))` =>
`mul ( unmerge( merge( ext( unmerge )), unmerge( merge( ext( unmerge
))))` =>
`mul ( ext(unmerge)), ( ext( unmerge ))) `




More information about the All-commits mailing list