Author: Owen Anderson Date: 2026-03-30T09:20:49+02:00 New Revision: 3f2e24726a49d4d7e53d9c9b61fe2e312706b347
URL: https://github.com/llvm/llvm-project/commit/3f2e24726a49d4d7e53d9c9b61fe2e312706b347 DIFF: https://github.com/llvm/llvm-project/commit/3f2e24726a49d4d7e53d9c9b61fe2e312706b347.diff LOG: [CHERI] Allow @llvm.clear_cache to accept pointers in address spaces other than 0. (#189283) Co-Authored-by: Jessica Clarke <[email protected]> Added: Modified: clang/lib/CodeGen/CGBuiltin.cpp clang/test/CodeGen/clear_cache.c llvm/include/llvm/IR/Intrinsics.td llvm/test/Bitcode/compatibility-3.6.ll llvm/test/Bitcode/compatibility-3.7.ll llvm/test/Bitcode/compatibility-3.8.ll llvm/test/Bitcode/compatibility-3.9.ll llvm/test/Bitcode/compatibility-4.0.ll llvm/test/Bitcode/compatibility-5.0.ll llvm/test/Bitcode/compatibility-6.0.ll llvm/test/Bitcode/compatibility.ll Removed: ################################################################################ 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) _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
