[clang] [llvm] [CHERI] Allow @llvm.clear_cache to accept pointers in address spaces other than 0. (PR #189283)
Owen Anderson via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 29 13:14:01 PDT 2026
https://github.com/resistor created https://github.com/llvm/llvm-project/pull/189283
Co-Authored-by: Jessica Clarke <jrtc27 at jrtc27.com>
>From 934cc5866daa6674150a91ecd4ff0cff3733b156 Mon Sep 17 00:00:00 2001
From: Owen Anderson <resistor at mac.com>
Date: Sun, 29 Mar 2026 22:11:48 +0200
Subject: [PATCH] [CHERI] Allow @llvm.clear_cache to accept pointers in address
spaces other than 0.
Co-Authored-by: Jessica Clarke <jrtc27 at jrtc27.com>
---
clang/lib/CodeGen/CGBuiltin.cpp | 2 +-
clang/test/CodeGen/clear_cache.c | 2 +-
llvm/include/llvm/IR/Intrinsics.td | 2 +-
llvm/test/Bitcode/compatibility-3.6.ll | 2 +-
llvm/test/Bitcode/compatibility-3.7.ll | 2 +-
llvm/test/Bitcode/compatibility-3.8.ll | 2 +-
llvm/test/Bitcode/compatibility-3.9.ll | 2 +-
llvm/test/Bitcode/compatibility-4.0.ll | 2 +-
llvm/test/Bitcode/compatibility-5.0.ll | 2 +-
llvm/test/Bitcode/compatibility-6.0.ll | 2 +-
llvm/test/Bitcode/compatibility.ll | 2 +-
11 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 51c5d970a0f84..4d74d681cd320 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -3829,7 +3829,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
case Builtin::BI__builtin___clear_cache: {
Value *Begin = EmitScalarExpr(E->getArg(0));
Value *End = EmitScalarExpr(E->getArg(1));
- Function *F = CGM.getIntrinsic(Intrinsic::clear_cache);
+ Function *F = CGM.getIntrinsic(Intrinsic::clear_cache, {CGM.DefaultPtrTy});
return RValue::get(Builder.CreateCall(F, {Begin, End}));
}
case Builtin::BI__builtin_trap:
diff --git a/clang/test/CodeGen/clear_cache.c b/clang/test/CodeGen/clear_cache.c
index d168cda02210f..d07ed2f5fcf97 100644
--- a/clang/test/CodeGen/clear_cache.c
+++ b/clang/test/CodeGen/clear_cache.c
@@ -10,7 +10,7 @@ char buffer[32] = "This is a largely unused buffer";
// CHECK-NEXT: entry:
// CHECK-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
// CHECK-NEXT: store i32 0, ptr [[RETVAL]], align 4
-// CHECK-NEXT: call void @llvm.clear_cache(ptr @buffer, ptr getelementptr inbounds nuw (i8, ptr @buffer, i64 32))
+// CHECK-NEXT: call void @llvm.clear_cache.p0(ptr @buffer, ptr getelementptr inbounds nuw (i8, ptr @buffer, i64 32))
// CHECK-NEXT: ret i32 0
//
int main(void) {
diff --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td
index b51ac732914bd..30e6c8f614a00 100644
--- a/llvm/include/llvm/IR/Intrinsics.td
+++ b/llvm/include/llvm/IR/Intrinsics.td
@@ -1974,7 +1974,7 @@ def int_fptosi_sat : DefaultAttrsIntrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty]>
// Clear cache intrinsic, default to ignore (ie. emit nothing)
// maps to void __clear_cache() on supporting platforms
-def int_clear_cache : Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty],
+def int_clear_cache : Intrinsic<[], [llvm_anyptr_ty, LLVMMatchType<0>],
[], "llvm.clear_cache">;
// Intrinsic to detect whether its argument is a constant.
diff --git a/llvm/test/Bitcode/compatibility-3.6.ll b/llvm/test/Bitcode/compatibility-3.6.ll
index 62b5a88d085c6..987017e9f2793 100644
--- a/llvm/test/Bitcode/compatibility-3.6.ll
+++ b/llvm/test/Bitcode/compatibility-3.6.ll
@@ -1140,7 +1140,7 @@ define void @intrinsics.codegen() {
; CHECK: call i64 @llvm.readcyclecounter()
call void @llvm.clear_cache(i8* null, i8* null)
- ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)
+ ; CHECK: call void @llvm.clear_cache.p0(ptr null, ptr null)
call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)
; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
diff --git a/llvm/test/Bitcode/compatibility-3.7.ll b/llvm/test/Bitcode/compatibility-3.7.ll
index 61cc50ef4dead..0e6668d871ca0 100644
--- a/llvm/test/Bitcode/compatibility-3.7.ll
+++ b/llvm/test/Bitcode/compatibility-3.7.ll
@@ -1171,7 +1171,7 @@ define void @intrinsics.codegen() {
; CHECK: call i64 @llvm.readcyclecounter()
call void @llvm.clear_cache(i8* null, i8* null)
- ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)
+ ; CHECK: call void @llvm.clear_cache.p0(ptr null, ptr null)
call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)
; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
diff --git a/llvm/test/Bitcode/compatibility-3.8.ll b/llvm/test/Bitcode/compatibility-3.8.ll
index 19a5c0f7a4e1f..553abc6efd778 100644
--- a/llvm/test/Bitcode/compatibility-3.8.ll
+++ b/llvm/test/Bitcode/compatibility-3.8.ll
@@ -1326,7 +1326,7 @@ define void @intrinsics.codegen() {
; CHECK: call i64 @llvm.readcyclecounter()
call void @llvm.clear_cache(i8* null, i8* null)
- ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)
+ ; CHECK: call void @llvm.clear_cache.p0(ptr null, ptr null)
call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)
; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
diff --git a/llvm/test/Bitcode/compatibility-3.9.ll b/llvm/test/Bitcode/compatibility-3.9.ll
index b29463940424a..10652265082ad 100644
--- a/llvm/test/Bitcode/compatibility-3.9.ll
+++ b/llvm/test/Bitcode/compatibility-3.9.ll
@@ -1397,7 +1397,7 @@ define void @intrinsics.codegen() {
; CHECK: call i64 @llvm.readcyclecounter()
call void @llvm.clear_cache(i8* null, i8* null)
- ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)
+ ; CHECK: call void @llvm.clear_cache.p0(ptr null, ptr null)
call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)
; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
diff --git a/llvm/test/Bitcode/compatibility-4.0.ll b/llvm/test/Bitcode/compatibility-4.0.ll
index 0d3a024af511d..d9b6360e1d0eb 100644
--- a/llvm/test/Bitcode/compatibility-4.0.ll
+++ b/llvm/test/Bitcode/compatibility-4.0.ll
@@ -1397,7 +1397,7 @@ define void @intrinsics.codegen() {
; CHECK: call i64 @llvm.readcyclecounter()
call void @llvm.clear_cache(i8* null, i8* null)
- ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)
+ ; CHECK: call void @llvm.clear_cache.p0(ptr null, ptr null)
call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)
; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
diff --git a/llvm/test/Bitcode/compatibility-5.0.ll b/llvm/test/Bitcode/compatibility-5.0.ll
index c59701c5915aa..95d05acb4ea47 100644
--- a/llvm/test/Bitcode/compatibility-5.0.ll
+++ b/llvm/test/Bitcode/compatibility-5.0.ll
@@ -1409,7 +1409,7 @@ define void @intrinsics.codegen() {
; CHECK: call i64 @llvm.readcyclecounter()
call void @llvm.clear_cache(i8* null, i8* null)
- ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)
+ ; CHECK: call void @llvm.clear_cache.p0(ptr null, ptr null)
call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)
; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
diff --git a/llvm/test/Bitcode/compatibility-6.0.ll b/llvm/test/Bitcode/compatibility-6.0.ll
index f0b18a8c8145e..e82a0b31a1d79 100644
--- a/llvm/test/Bitcode/compatibility-6.0.ll
+++ b/llvm/test/Bitcode/compatibility-6.0.ll
@@ -1419,7 +1419,7 @@ define void @intrinsics.codegen() {
; CHECK: call i64 @llvm.readcyclecounter()
call void @llvm.clear_cache(i8* null, i8* null)
- ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)
+ ; CHECK: call void @llvm.clear_cache.p0(ptr null, ptr null)
call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)
; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
diff --git a/llvm/test/Bitcode/compatibility.ll b/llvm/test/Bitcode/compatibility.ll
index f2df4c68404fb..3c154633740ee 100644
--- a/llvm/test/Bitcode/compatibility.ll
+++ b/llvm/test/Bitcode/compatibility.ll
@@ -1915,7 +1915,7 @@ define void @intrinsics.codegen() {
; CHECK: call i64 @llvm.readcyclecounter()
call void @llvm.clear_cache(ptr null, ptr null)
- ; CHECK: call void @llvm.clear_cache(ptr null, ptr null)
+ ; CHECK: call void @llvm.clear_cache.p0(ptr null, ptr null)
call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
; CHECK: call void @llvm.instrprof_increment(ptr null, i64 0, i32 0, i32 0)
More information about the cfe-commits
mailing list