[llvm-branch-commits] [llvm] GlobalISel: Improve extended LLT deduction for G_MERGE_VALUE widenScalar (PR #196399)
https://github.com/petar-avramovic updated
https://github.com/llvm/llvm-project/pull/196399
>From f8b583f47016dba5323c39509b5239358548c81d Mon Sep 17 00:00:00 2001
From: Petar Avramovic
Date: Thu, 7 May 2026 20:57:55 +0200
Subject: [PATCH] GlobalISel: Improve extended LLT deduction for G_MERGE_VALUE
widenScalar
---
llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 4 ++--
llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir | 3 +--
llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir | 3 +--
3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index 71cda8a480dd7..d705fc29678fc 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -2292,11 +2292,11 @@ LegalizerHelper::widenScalarMergeValues(MachineInstr
&MI, unsigned TypeIdx,
// %10:_(s12) = G_MERGE_VALUES %8, %9
const int GCD = std::gcd(SrcSize, WideSize);
- LLT GCDTy = LLT::scalar(GCD);
+ LLT GCDTy = WideTy.changeElementSize(GCD);
SmallVector NewMergeRegs;
SmallVector Unmerges;
- LLT WideDstTy = LLT::scalar(NumMerge * WideSize);
+ LLT WideDstTy = WideTy.changeElementSize(NumMerge * WideSize);
// Decompose the original operands if they don't evenly divide.
for (const MachineOperand &MO : llvm::drop_begin(MI.operands())) {
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir
b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir
index 608f85088e9a5..a63a5ddbcd590 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir
@@ -220,9 +220,8 @@ body: |
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne),
[[UADDE]](i32), [[SEXT_INREG2]]
; CHECK-NEXT: [[UV4:%[0-9]+]]:_(i8), [[UV5:%[0-9]+]]:_(i8),
[[UV6:%[0-9]+]]:_(i8), [[UV7:%[0-9]+]]:_(i8) = G_UNMERGE_VALUES [[UADDE]](i32)
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(i8) = G_IMPLICIT_DEF
-; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
; CHECK-NEXT: [[MV:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[UV4]](i8),
[[UV5]](i8), [[UV6]](i8), [[DEF]](i8)
-; CHECK-NEXT: [[MV1:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[DEF1]](s8),
[[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
+; CHECK-NEXT: [[MV1:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[DEF]](i8),
[[DEF]](i8), [[DEF]](i8), [[DEF]](i8)
; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[MV]](i32),
[[MV1]](i32)
; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s64) = G_SEXT_INREG [[MV2]], 24
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 23
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir
b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir
index f0dad446e3728..19ae38413900b 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir
@@ -220,9 +220,8 @@ body: |
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne),
[[USUBE]](i32), [[SEXT_INREG2]]
; CHECK-NEXT: [[UV4:%[0-9]+]]:_(i8), [[UV5:%[0-9]+]]:_(i8),
[[UV6:%[0-9]+]]:_(i8), [[UV7:%[0-9]+]]:_(i8) = G_UNMERGE_VALUES [[USUBE]](i32)
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(i8) = G_IMPLICIT_DEF
-; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
; CHECK-NEXT: [[MV:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[UV4]](i8),
[[UV5]](i8), [[UV6]](i8), [[DEF]](i8)
-; CHECK-NEXT: [[MV1:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[DEF1]](s8),
[[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
+; CHECK-NEXT: [[MV1:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[DEF]](i8),
[[DEF]](i8), [[DEF]](i8), [[DEF]](i8)
; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[MV]](i32),
[[MV1]](i32)
; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s64) = G_SEXT_INREG [[MV2]], 24
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 23
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] GlobalISel: Improve extended LLT deduction for G_MERGE_VALUE widenScalar (PR #196399)
https://github.com/petar-avramovic updated
https://github.com/llvm/llvm-project/pull/196399
>From f8b583f47016dba5323c39509b5239358548c81d Mon Sep 17 00:00:00 2001
From: Petar Avramovic
Date: Thu, 7 May 2026 20:57:55 +0200
Subject: [PATCH] GlobalISel: Improve extended LLT deduction for G_MERGE_VALUE
widenScalar
---
llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 4 ++--
llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir | 3 +--
llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir | 3 +--
3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index 71cda8a480dd7..d705fc29678fc 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -2292,11 +2292,11 @@ LegalizerHelper::widenScalarMergeValues(MachineInstr
&MI, unsigned TypeIdx,
// %10:_(s12) = G_MERGE_VALUES %8, %9
const int GCD = std::gcd(SrcSize, WideSize);
- LLT GCDTy = LLT::scalar(GCD);
+ LLT GCDTy = WideTy.changeElementSize(GCD);
SmallVector NewMergeRegs;
SmallVector Unmerges;
- LLT WideDstTy = LLT::scalar(NumMerge * WideSize);
+ LLT WideDstTy = WideTy.changeElementSize(NumMerge * WideSize);
// Decompose the original operands if they don't evenly divide.
for (const MachineOperand &MO : llvm::drop_begin(MI.operands())) {
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir
b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir
index 608f85088e9a5..a63a5ddbcd590 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir
@@ -220,9 +220,8 @@ body: |
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne),
[[UADDE]](i32), [[SEXT_INREG2]]
; CHECK-NEXT: [[UV4:%[0-9]+]]:_(i8), [[UV5:%[0-9]+]]:_(i8),
[[UV6:%[0-9]+]]:_(i8), [[UV7:%[0-9]+]]:_(i8) = G_UNMERGE_VALUES [[UADDE]](i32)
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(i8) = G_IMPLICIT_DEF
-; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
; CHECK-NEXT: [[MV:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[UV4]](i8),
[[UV5]](i8), [[UV6]](i8), [[DEF]](i8)
-; CHECK-NEXT: [[MV1:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[DEF1]](s8),
[[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
+; CHECK-NEXT: [[MV1:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[DEF]](i8),
[[DEF]](i8), [[DEF]](i8), [[DEF]](i8)
; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[MV]](i32),
[[MV1]](i32)
; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s64) = G_SEXT_INREG [[MV2]], 24
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 23
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir
b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir
index f0dad446e3728..19ae38413900b 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-ssubsat.mir
@@ -220,9 +220,8 @@ body: |
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne),
[[USUBE]](i32), [[SEXT_INREG2]]
; CHECK-NEXT: [[UV4:%[0-9]+]]:_(i8), [[UV5:%[0-9]+]]:_(i8),
[[UV6:%[0-9]+]]:_(i8), [[UV7:%[0-9]+]]:_(i8) = G_UNMERGE_VALUES [[USUBE]](i32)
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(i8) = G_IMPLICIT_DEF
-; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
; CHECK-NEXT: [[MV:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[UV4]](i8),
[[UV5]](i8), [[UV6]](i8), [[DEF]](i8)
-; CHECK-NEXT: [[MV1:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[DEF1]](s8),
[[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
+; CHECK-NEXT: [[MV1:%[0-9]+]]:_(i32) = G_MERGE_VALUES [[DEF]](i8),
[[DEF]](i8), [[DEF]](i8), [[DEF]](i8)
; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[MV]](i32),
[[MV1]](i32)
; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s64) = G_SEXT_INREG [[MV2]], 24
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 23
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
