https://github.com/krzysz00 updated 
https://github.com/llvm/llvm-project/pull/217067

>From 2d63213bd98730bc6c049702a87d80d7198a7e31 Mon Sep 17 00:00:00 2001
From: Krzysztof Drewniak <[email protected]>
Date: Tue, 18 Aug 2026 19:44:58 +0000
Subject: [PATCH 1/2] [AMDGPU] Pre-commit tests for num_records
 canonicalization

Add tests for having InstCombine canonicalize the num_records argument
of llvm.amdgcn.make.buffer.rsrc to the width it will ultimately have,
which lets later passes see that, for example, the high bits of the i64
that Clang emits aren't used.

AI disclosure: Claude generated these and I've looked at them
---
 .../AMDGPU/make-buffer-rsrc-num-records.ll    | 153 ++++++++++++++++++
 1 file changed, 153 insertions(+)
 create mode 100644 
llvm/test/Transforms/InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll

diff --git 
a/llvm/test/Transforms/InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll 
b/llvm/test/Transforms/InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll
new file mode 100644
index 0000000000000..534384f3183b4
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll
@@ -0,0 +1,153 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 
UTC_ARGS: --version 6
+; RUN: opt -mtriple=amdgcn-amd-amdhsa -passes=instcombine -S < %s | FileCheck 
%s --check-prefixes=GENERIC
+; RUN: opt -mtriple=amdgpu9.00-amd-amdhsa -passes=instcombine -S < %s | 
FileCheck %s --check-prefixes=RECORDS32
+; RUN: opt -mtriple=amdgpu12.50-amd-amdhsa -passes=instcombine -S < %s | 
FileCheck %s --check-prefixes=RECORDS45
+
+define ptr addrspace(8) @from_i64(ptr %p, i16 %stride, i64 %num, i32 %flags) {
+; GENERIC-LABEL: define ptr addrspace(8) @from_i64(
+; GENERIC-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i64 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; GENERIC-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr [[P]], i16 [[STRIDE]], i64 [[NUM]], 
i32 [[FLAGS]])
+; GENERIC-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS32-LABEL: define ptr addrspace(8) @from_i64(
+; RECORDS32-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i64 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS32-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr [[P]], i16 [[STRIDE]], i64 [[NUM]], 
i32 [[FLAGS]])
+; RECORDS32-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS45-LABEL: define ptr addrspace(8) @from_i64(
+; RECORDS45-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i64 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS45-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr [[P]], i16 [[STRIDE]], i64 [[NUM]], 
i32 [[FLAGS]])
+; RECORDS45-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+  %rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr 
%p, i16 %stride, i64 %num, i32 %flags)
+  ret ptr addrspace(8) %rsrc
+}
+
+define ptr addrspace(8) @from_i128(ptr %p, i16 %stride, i128 %num, i32 %flags) 
{
+; GENERIC-LABEL: define ptr addrspace(8) @from_i128(
+; GENERIC-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i128 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; GENERIC-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i128(ptr [[P]], i16 [[STRIDE]], i128 
[[NUM]], i32 [[FLAGS]])
+; GENERIC-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS32-LABEL: define ptr addrspace(8) @from_i128(
+; RECORDS32-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i128 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS32-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i128(ptr [[P]], i16 [[STRIDE]], i128 
[[NUM]], i32 [[FLAGS]])
+; RECORDS32-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS45-LABEL: define ptr addrspace(8) @from_i128(
+; RECORDS45-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i128 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS45-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i128(ptr [[P]], i16 [[STRIDE]], i128 
[[NUM]], i32 [[FLAGS]])
+; RECORDS45-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+  %rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0.i128(ptr 
%p, i16 %stride, i128 %num, i32 %flags)
+  ret ptr addrspace(8) %rsrc
+}
+
+define ptr addrspace(8) @from_i32(ptr %p, i16 %stride, i32 %num, i32 %flags) {
+; GENERIC-LABEL: define ptr addrspace(8) @from_i32(
+; GENERIC-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; GENERIC-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i32(ptr [[P]], i16 [[STRIDE]], i32 [[NUM]], 
i32 [[FLAGS]])
+; GENERIC-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS32-LABEL: define ptr addrspace(8) @from_i32(
+; RECORDS32-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS32-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i32(ptr [[P]], i16 [[STRIDE]], i32 [[NUM]], 
i32 [[FLAGS]])
+; RECORDS32-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS45-LABEL: define ptr addrspace(8) @from_i32(
+; RECORDS45-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS45-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i32(ptr [[P]], i16 [[STRIDE]], i32 [[NUM]], 
i32 [[FLAGS]])
+; RECORDS45-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+  %rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0.i32(ptr 
%p, i16 %stride, i32 %num, i32 %flags)
+  ret ptr addrspace(8) %rsrc
+}
+
+define ptr addrspace(8) @from_i45(ptr %p, i16 %stride, i45 %num, i32 %flags) {
+; GENERIC-LABEL: define ptr addrspace(8) @from_i45(
+; GENERIC-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i45 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; GENERIC-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i45(ptr [[P]], i16 [[STRIDE]], i45 [[NUM]], 
i32 [[FLAGS]])
+; GENERIC-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS32-LABEL: define ptr addrspace(8) @from_i45(
+; RECORDS32-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i45 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS32-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i45(ptr [[P]], i16 [[STRIDE]], i45 [[NUM]], 
i32 [[FLAGS]])
+; RECORDS32-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS45-LABEL: define ptr addrspace(8) @from_i45(
+; RECORDS45-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i45 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS45-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i45(ptr [[P]], i16 [[STRIDE]], i45 [[NUM]], 
i32 [[FLAGS]])
+; RECORDS45-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+  %rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0.i45(ptr 
%p, i16 %stride, i45 %num, i32 %flags)
+  ret ptr addrspace(8) %rsrc
+}
+
+define ptr addrspace(8) @from_i16(ptr %p, i16 %stride, i16 %num, i32 %flags) {
+; GENERIC-LABEL: define ptr addrspace(8) @from_i16(
+; GENERIC-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i16 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; GENERIC-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i16(ptr [[P]], i16 [[STRIDE]], i16 [[NUM]], 
i32 [[FLAGS]])
+; GENERIC-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS32-LABEL: define ptr addrspace(8) @from_i16(
+; RECORDS32-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i16 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS32-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i16(ptr [[P]], i16 [[STRIDE]], i16 [[NUM]], 
i32 [[FLAGS]])
+; RECORDS32-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS45-LABEL: define ptr addrspace(8) @from_i16(
+; RECORDS45-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i16 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS45-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i16(ptr [[P]], i16 [[STRIDE]], i16 [[NUM]], 
i32 [[FLAGS]])
+; RECORDS45-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+  %rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0.i16(ptr 
%p, i16 %stride, i16 %num, i32 %flags)
+  ret ptr addrspace(8) %rsrc
+}
+
+define ptr addrspace(8) @from_constant(ptr %p, i16 %stride, i32 %flags) {
+; GENERIC-LABEL: define ptr addrspace(8) @from_constant(
+; GENERIC-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[FLAGS:%.*]]) {
+; GENERIC-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr [[P]], i16 [[STRIDE]], i64 
4294967296, i32 [[FLAGS]])
+; GENERIC-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS32-LABEL: define ptr addrspace(8) @from_constant(
+; RECORDS32-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[FLAGS:%.*]]) {
+; RECORDS32-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr [[P]], i16 [[STRIDE]], i64 
4294967296, i32 [[FLAGS]])
+; RECORDS32-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS45-LABEL: define ptr addrspace(8) @from_constant(
+; RECORDS45-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i32 [[FLAGS:%.*]]) {
+; RECORDS45-NEXT:    [[RSRC:%.*]] = call ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr [[P]], i16 [[STRIDE]], i64 
4294967296, i32 [[FLAGS]])
+; RECORDS45-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+  %rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr 
%p, i16 %stride, i64 4294967296, i32 %flags)
+  ret ptr addrspace(8) %rsrc
+}
+
+define ptr addrspace(8) @keeps_metadata_and_attributes(ptr %p, i16 %stride, 
i64 %num, i32 %flags) {
+; GENERIC-LABEL: define ptr addrspace(8) @keeps_metadata_and_attributes(
+; GENERIC-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i64 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; GENERIC-NEXT:    [[RSRC:%.*]] = tail call align 16 ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr noundef [[P]], i16 [[STRIDE]], i64 
[[NUM]], i32 [[FLAGS]]), !amdgpu.uniform [[META0:![0-9]+]]
+; GENERIC-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS32-LABEL: define ptr addrspace(8) @keeps_metadata_and_attributes(
+; RECORDS32-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i64 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS32-NEXT:    [[RSRC:%.*]] = tail call align 16 ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr noundef [[P]], i16 [[STRIDE]], i64 
[[NUM]], i32 [[FLAGS]]), !amdgpu.uniform [[META0:![0-9]+]]
+; RECORDS32-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+; RECORDS45-LABEL: define ptr addrspace(8) @keeps_metadata_and_attributes(
+; RECORDS45-SAME: ptr [[P:%.*]], i16 [[STRIDE:%.*]], i64 [[NUM:%.*]], i32 
[[FLAGS:%.*]]) {
+; RECORDS45-NEXT:    [[RSRC:%.*]] = tail call align 16 ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr noundef [[P]], i16 [[STRIDE]], i64 
[[NUM]], i32 [[FLAGS]]), !amdgpu.uniform [[META0:![0-9]+]]
+; RECORDS45-NEXT:    ret ptr addrspace(8) [[RSRC]]
+;
+  %rsrc = tail call align 16 ptr addrspace(8) 
@llvm.amdgcn.make.buffer.rsrc.p8.p0.i64(ptr noundef %p, i16 %stride, i64 %num, 
i32 %flags), !amdgpu.uniform !0
+  ret ptr addrspace(8) %rsrc
+}
+
+!0 = !{}
+;.
+; GENERIC: [[META0]] = !{}
+;.
+; RECORDS32: [[META0]] = !{}
+;.
+; RECORDS45: [[META0]] = !{}
+;.

>From 3753c71c26bdf6dc6f2e91676bf3dd8d80469d90 Mon Sep 17 00:00:00 2001
From: Krzysztof Drewniak <[email protected]>
Date: Tue, 18 Aug 2026 21:47:04 +0000
Subject: [PATCH 2/2] Clean up triples

---
 .../InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll      | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/llvm/test/Transforms/InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll 
b/llvm/test/Transforms/InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll
index 534384f3183b4..7a6e6b43e345e 100644
--- a/llvm/test/Transforms/InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll
+++ b/llvm/test/Transforms/InstCombine/AMDGPU/make-buffer-rsrc-num-records.ll
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 
UTC_ARGS: --version 6
-; RUN: opt -mtriple=amdgcn-amd-amdhsa -passes=instcombine -S < %s | FileCheck 
%s --check-prefixes=GENERIC
-; RUN: opt -mtriple=amdgpu9.00-amd-amdhsa -passes=instcombine -S < %s | 
FileCheck %s --check-prefixes=RECORDS32
-; RUN: opt -mtriple=amdgpu12.50-amd-amdhsa -passes=instcombine -S < %s | 
FileCheck %s --check-prefixes=RECORDS45
+; RUN: opt -mtriple=amdgpu-- -passes=instcombine -S < %s | FileCheck %s 
--check-prefixes=GENERIC
+; RUN: opt -mtriple=amdgpu9.00-- -passes=instcombine -S < %s | FileCheck %s 
--check-prefixes=RECORDS32
+; RUN: opt -mtriple=amdgpu12.50-- -passes=instcombine -S < %s | FileCheck %s 
--check-prefixes=RECORDS45
 
 define ptr addrspace(8) @from_i64(ptr %p, i16 %stride, i64 %num, i32 %flags) {
 ; GENERIC-LABEL: define ptr addrspace(8) @from_i64(

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to