[llvm] [InstCombine][AMDGPU] Disable PtrReplacer when select has mismatch AS. (PR #98456)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 11 10:44:20 PDT 2024


================
@@ -0,0 +1,48 @@
+; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=instcombine %s | FileCheck %s
+
+; Variant of select with addrspacecast in one branch on path to root alloca (ic opt is then disabled)
+define void @addrspacecast_true_path(ptr addrspace(4) align 8 byref([2 x i8]) %arg) {
+; CHECK-LABEL: define void @addrspacecast_true_path(ptr addrspace(4) byref([2 x i8]) align 8 %arg) {
+; CHECK-NEXT:  %coerce = alloca [2 x i8], align 8, addrspace(5)
+; CHECK-NEXT:  call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef align 8 dereferenceable(16) %coerce, ptr addrspace(4) noundef align 8 dereferenceable(16) %arg, i64 16, i1 false)
+; CHECK-NEXT:  %load.coerce = load i32, ptr addrspace(5) %coerce, align 8
+; CHECK-NEXT:  %cmp.i = icmp slt i32 %load.coerce, 10
+; CHECK-NEXT:  %inline_values.i = getelementptr inbounds i8, ptr addrspace(5) %coerce, i32 5
+; CHECK-NEXT:  %1 = addrspacecast ptr addrspace(5) %inline_values.i to ptr
+; CHECK-NEXT:  %out_of_line_values.i = getelementptr inbounds i8, ptr addrspace(5) %coerce, i32 6
+; CHECK-NEXT:  %2 = load ptr, ptr addrspace(5) %out_of_line_values.i, align 8
+; CHECK-NEXT:  %retval.0.i = select i1 %cmp.i, ptr %1, ptr %2
+; CHECK-NEXT:  call void @llvm.lifetime.end.p0(i64 8, ptr %retval.0.i)
+; CHECK-NEXT:  ret void
+; CHECK-NEXT:}
+  %coerce = alloca [2 x i8], align 8, addrspace(5)
+  call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) align 8 %coerce, ptr addrspace(4) align 8 %arg, i64 16, i1 false)
+  %load.coerce = load i32, ptr addrspace(5) %coerce, align 8
+  %cmp.i = icmp slt i32 %load.coerce, 10
+  %inline_values.i = getelementptr inbounds i8, ptr addrspace(5) %coerce, i64 5
+  %2 = addrspacecast ptr addrspace(5) %inline_values.i to ptr
+  %out_of_line_values.i = getelementptr inbounds i8, ptr addrspace(5) %coerce, i64 6
+  %3 = load ptr, ptr addrspace(5) %out_of_line_values.i, align 8
----------------
arsenm wrote:

Use named values in tests 

https://github.com/llvm/llvm-project/pull/98456


More information about the llvm-commits mailing list