[PATCH] D114849: [AMDGPU][clang] Fix __builtin_nontemporal_store() failure on AMDGPU

krishna chaitanya sankisa via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 30 23:27:16 PST 2021

skc7 created this revision.
skc7 added reviewers: sameerds, yaxunl.
Herald added subscribers: t-tye, tpr, dstuttard, jvesely, kzhuravl.
skc7 requested review of this revision.
Herald added subscribers: cfe-commits, wdng.
Herald added a project: clang.

__builtin_nontemporal_store() fails on AMDGPU. This is due to mismatch in address space while creating bitcast. This change matches addrspace of poiter type to src addrSpace in EmitNontemporalStore() in clang codegen.

  rG LLVM Github Monorepo



Index: clang/test/CodeGenOpenCL/amdgcn-non-temporal-store.cl
--- /dev/null
+++ clang/test/CodeGenOpenCL/amdgcn-non-temporal-store.cl
@@ -0,0 +1,8 @@
+// REQUIRES: amdgpu-registered-target
+// RUN: %clang_cc1 -triple amdgcn-unknown-unknown -S -emit-llvm -o - %s | FileCheck %s
+// CHECK-LABEL: @test_non_temporal_store_kernel
+// CHECK: store i32 0, i32 addrspace(1)* %{{.*}}, align 4, !tbaa !{{.*}}, !nontemporal {{.*}}
+kernel void test_non_temporal_store_kernel(global unsigned int* io) {
+  __builtin_nontemporal_store(0, io);
\ No newline at end of file
Index: clang/lib/CodeGen/CGBuiltin.cpp
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -170,8 +170,9 @@
   // Convert the type of the pointer to a pointer to the stored type.
   Val = CGF.EmitToMemory(Val, E->getArg(0)->getType());
+  unsigned SrcAddrSpace = Address->getType()->getPointerAddressSpace();
   Value *BC = CGF.Builder.CreateBitCast(
-      Address, llvm::PointerType::getUnqual(Val->getType()), "cast");
+      Address, llvm::PointerType::get(Val->getType(), SrcAddrSpace), "cast");
   LValue LV = CGF.MakeNaturalAlignAddrLValue(BC, E->getArg(0)->getType());
   CGF.EmitStoreOfScalar(Val, LV, false);

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D114849.390924.patch
Type: text/x-patch
Size: 1371 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211201/11d9ec5e/attachment.bin>

More information about the cfe-commits mailing list