[clang] [clang] Support constexpr alignment of __builtin_assume_aligned. (PR #127223)
https://github.com/tangjj11 updated https://github.com/llvm/llvm-project/pull/127223 >From 5c83ee47a5927645ded9ec0af061ff21c094f008 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 00:35:34 +0800 Subject: [PATCH 1/3] Add test. --- clang/test/CodeGen/builtin-assume-aligned.cpp | 17 + 1 file changed, 17 insertions(+) create mode 100644 clang/test/CodeGen/builtin-assume-aligned.cpp diff --git a/clang/test/CodeGen/builtin-assume-aligned.cpp b/clang/test/CodeGen/builtin-assume-aligned.cpp new file mode 100644 index 0..fae4221d7d7e7 --- /dev/null +++ b/clang/test/CodeGen/builtin-assume-aligned.cpp @@ -0,0 +1,17 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s + +constexpr int get_align() { return 1; } + +// CHECK-LABEL: @Ztest1P( +// CHECK-NEXT: entry: +// CHECK-NEXT:[[A_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT:store ptr [[A:%.*]], ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8 +// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 0) ] +// CHECK-NEXT:store ptr [[TMP0]], ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[TMP3:%.*]] = load ptr, ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 0 +// CHECK-NEXT:[[TMP4:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 +// CHECK-NEXT:ret i32 [[TMP4]] +void *test1(void *a) { return __builtin_assume_aligned(a, 32, get_align()); } >From ada1d827164472676fc3cc36fb8b0bca5e053286 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 00:37:25 +0800 Subject: [PATCH 2/3] support constexpr alignment of __builtin_assume_aligned. --- clang/lib/CodeGen/CGBuiltin.cpp | 20 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index d57f491a20c8e..bff5451a01300 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -3829,14 +3829,18 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, (E->getNumArgs() > 2) ? EmitScalarExpr(E->getArg(2)) : nullptr; Value *AlignmentValue = EmitScalarExpr(E->getArg(1)); -ConstantInt *AlignmentCI = cast(AlignmentValue); -if (AlignmentCI->getValue().ugt(llvm::Value::MaximumAlignment)) - AlignmentCI = ConstantInt::get(AlignmentCI->getIntegerType(), - llvm::Value::MaximumAlignment); - -emitAlignmentAssumption(PtrValue, Ptr, -/*The expr loc is sufficient.*/ SourceLocation(), -AlignmentCI, OffsetValue); +if (ConstantInt *AlignmentCI = cast(AlignmentValue)) { + if (AlignmentCI->getValue().ugt(llvm::Value::MaximumAlignment)) +AlignmentCI = ConstantInt::get(AlignmentCI->getIntegerType(), + llvm::Value::MaximumAlignment); + + emitAlignmentAssumption(PtrValue, Ptr, + /*The expr loc is sufficient.*/ SourceLocation(), + AlignmentCI, OffsetValue); +} else + emitAlignmentAssumption(PtrValue, Ptr, + /*The expr loc is sufficient.*/ SourceLocation(), + AlignmentValue, OffsetValue); return RValue::get(PtrValue); } case Builtin::BI__builtin_assume_dereferenceable: { >From eb5e0ed71165fcf90f0bfd54daa6642e4c17a0a4 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 01:17:26 +0800 Subject: [PATCH 3/3] Update builtin-assume-aligned.cpp --- clang/test/CodeGen/builtin-assume-aligned.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/test/CodeGen/builtin-assume-aligned.cpp b/clang/test/CodeGen/builtin-assume-aligned.cpp index fae4221d7d7e7..63ff01c98ccdc 100644 --- a/clang/test/CodeGen/builtin-assume-aligned.cpp +++ b/clang/test/CodeGen/builtin-assume-aligned.cpp @@ -3,12 +3,13 @@ constexpr int get_align() { return 1; } -// CHECK-LABEL: @Ztest1P( +// CHECK-LABEL: @_Z5test1Pv( // CHECK-NEXT: entry: // CHECK-NEXT:[[A_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT:store ptr [[A:%.*]], ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8 -// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 0) ] +// CHECK-NEXT:[[TMP1:%.*]] = call noundef i32 @_Z9get_alignv() +// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 [[TMP1]]) ] // CHECK-NEXT:store ptr [[TMP0]], ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[TMP3:%.*]] = load ptr, ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 0 _
[clang] [clang] Support constexpr alignment of __builtin_assume_aligned. (PR #127223)
https://github.com/tangjj11 closed https://github.com/llvm/llvm-project/pull/127223 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] Support constexpr alignment of __builtin_assume_aligned. (PR #127223)
https://github.com/tangjj11 created https://github.com/llvm/llvm-project/pull/127223 None >From 5c83ee47a5927645ded9ec0af061ff21c094f008 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 00:35:34 +0800 Subject: [PATCH 1/2] Add test. --- clang/test/CodeGen/builtin-assume-aligned.cpp | 17 + 1 file changed, 17 insertions(+) create mode 100644 clang/test/CodeGen/builtin-assume-aligned.cpp diff --git a/clang/test/CodeGen/builtin-assume-aligned.cpp b/clang/test/CodeGen/builtin-assume-aligned.cpp new file mode 100644 index 0..fae4221d7d7e7 --- /dev/null +++ b/clang/test/CodeGen/builtin-assume-aligned.cpp @@ -0,0 +1,17 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s + +constexpr int get_align() { return 1; } + +// CHECK-LABEL: @Ztest1P( +// CHECK-NEXT: entry: +// CHECK-NEXT:[[A_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT:store ptr [[A:%.*]], ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8 +// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 0) ] +// CHECK-NEXT:store ptr [[TMP0]], ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[TMP3:%.*]] = load ptr, ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 0 +// CHECK-NEXT:[[TMP4:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 +// CHECK-NEXT:ret i32 [[TMP4]] +void *test1(void *a) { return __builtin_assume_aligned(a, 32, get_align()); } >From ada1d827164472676fc3cc36fb8b0bca5e053286 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 00:37:25 +0800 Subject: [PATCH 2/2] support constexpr alignment of __builtin_assume_aligned. --- clang/lib/CodeGen/CGBuiltin.cpp | 20 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index d57f491a20c8e..bff5451a01300 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -3829,14 +3829,18 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, (E->getNumArgs() > 2) ? EmitScalarExpr(E->getArg(2)) : nullptr; Value *AlignmentValue = EmitScalarExpr(E->getArg(1)); -ConstantInt *AlignmentCI = cast(AlignmentValue); -if (AlignmentCI->getValue().ugt(llvm::Value::MaximumAlignment)) - AlignmentCI = ConstantInt::get(AlignmentCI->getIntegerType(), - llvm::Value::MaximumAlignment); - -emitAlignmentAssumption(PtrValue, Ptr, -/*The expr loc is sufficient.*/ SourceLocation(), -AlignmentCI, OffsetValue); +if (ConstantInt *AlignmentCI = cast(AlignmentValue)) { + if (AlignmentCI->getValue().ugt(llvm::Value::MaximumAlignment)) +AlignmentCI = ConstantInt::get(AlignmentCI->getIntegerType(), + llvm::Value::MaximumAlignment); + + emitAlignmentAssumption(PtrValue, Ptr, + /*The expr loc is sufficient.*/ SourceLocation(), + AlignmentCI, OffsetValue); +} else + emitAlignmentAssumption(PtrValue, Ptr, + /*The expr loc is sufficient.*/ SourceLocation(), + AlignmentValue, OffsetValue); return RValue::get(PtrValue); } case Builtin::BI__builtin_assume_dereferenceable: { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] Support constexpr alignment of __builtin_assume_aligned. (PR #127223)
https://github.com/tangjj11 updated https://github.com/llvm/llvm-project/pull/127223 >From 5c83ee47a5927645ded9ec0af061ff21c094f008 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 00:35:34 +0800 Subject: [PATCH 1/3] Add test. --- clang/test/CodeGen/builtin-assume-aligned.cpp | 17 + 1 file changed, 17 insertions(+) create mode 100644 clang/test/CodeGen/builtin-assume-aligned.cpp diff --git a/clang/test/CodeGen/builtin-assume-aligned.cpp b/clang/test/CodeGen/builtin-assume-aligned.cpp new file mode 100644 index 0..fae4221d7d7e7 --- /dev/null +++ b/clang/test/CodeGen/builtin-assume-aligned.cpp @@ -0,0 +1,17 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s + +constexpr int get_align() { return 1; } + +// CHECK-LABEL: @Ztest1P( +// CHECK-NEXT: entry: +// CHECK-NEXT:[[A_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT:store ptr [[A:%.*]], ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8 +// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 0) ] +// CHECK-NEXT:store ptr [[TMP0]], ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[TMP3:%.*]] = load ptr, ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 0 +// CHECK-NEXT:[[TMP4:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 +// CHECK-NEXT:ret i32 [[TMP4]] +void *test1(void *a) { return __builtin_assume_aligned(a, 32, get_align()); } >From ada1d827164472676fc3cc36fb8b0bca5e053286 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 00:37:25 +0800 Subject: [PATCH 2/3] support constexpr alignment of __builtin_assume_aligned. --- clang/lib/CodeGen/CGBuiltin.cpp | 20 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index d57f491a20c8e..bff5451a01300 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -3829,14 +3829,18 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, (E->getNumArgs() > 2) ? EmitScalarExpr(E->getArg(2)) : nullptr; Value *AlignmentValue = EmitScalarExpr(E->getArg(1)); -ConstantInt *AlignmentCI = cast(AlignmentValue); -if (AlignmentCI->getValue().ugt(llvm::Value::MaximumAlignment)) - AlignmentCI = ConstantInt::get(AlignmentCI->getIntegerType(), - llvm::Value::MaximumAlignment); - -emitAlignmentAssumption(PtrValue, Ptr, -/*The expr loc is sufficient.*/ SourceLocation(), -AlignmentCI, OffsetValue); +if (ConstantInt *AlignmentCI = cast(AlignmentValue)) { + if (AlignmentCI->getValue().ugt(llvm::Value::MaximumAlignment)) +AlignmentCI = ConstantInt::get(AlignmentCI->getIntegerType(), + llvm::Value::MaximumAlignment); + + emitAlignmentAssumption(PtrValue, Ptr, + /*The expr loc is sufficient.*/ SourceLocation(), + AlignmentCI, OffsetValue); +} else + emitAlignmentAssumption(PtrValue, Ptr, + /*The expr loc is sufficient.*/ SourceLocation(), + AlignmentValue, OffsetValue); return RValue::get(PtrValue); } case Builtin::BI__builtin_assume_dereferenceable: { >From eb5e0ed71165fcf90f0bfd54daa6642e4c17a0a4 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 01:17:26 +0800 Subject: [PATCH 3/3] Update builtin-assume-aligned.cpp --- clang/test/CodeGen/builtin-assume-aligned.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/test/CodeGen/builtin-assume-aligned.cpp b/clang/test/CodeGen/builtin-assume-aligned.cpp index fae4221d7d7e7..63ff01c98ccdc 100644 --- a/clang/test/CodeGen/builtin-assume-aligned.cpp +++ b/clang/test/CodeGen/builtin-assume-aligned.cpp @@ -3,12 +3,13 @@ constexpr int get_align() { return 1; } -// CHECK-LABEL: @Ztest1P( +// CHECK-LABEL: @_Z5test1Pv( // CHECK-NEXT: entry: // CHECK-NEXT:[[A_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT:store ptr [[A:%.*]], ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8 -// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 0) ] +// CHECK-NEXT:[[TMP1:%.*]] = call noundef i32 @_Z9get_alignv() +// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 [[TMP1]]) ] // CHECK-NEXT:store ptr [[TMP0]], ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[TMP3:%.*]] = load ptr, ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 0 _
[clang] [clang] Support constexpr alignment of __builtin_assume_aligned. (PR #127223)
https://github.com/tangjj11 updated https://github.com/llvm/llvm-project/pull/127223 >From 5c83ee47a5927645ded9ec0af061ff21c094f008 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 00:35:34 +0800 Subject: [PATCH 1/3] Add test. --- clang/test/CodeGen/builtin-assume-aligned.cpp | 17 + 1 file changed, 17 insertions(+) create mode 100644 clang/test/CodeGen/builtin-assume-aligned.cpp diff --git a/clang/test/CodeGen/builtin-assume-aligned.cpp b/clang/test/CodeGen/builtin-assume-aligned.cpp new file mode 100644 index 0..fae4221d7d7e7 --- /dev/null +++ b/clang/test/CodeGen/builtin-assume-aligned.cpp @@ -0,0 +1,17 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s + +constexpr int get_align() { return 1; } + +// CHECK-LABEL: @Ztest1P( +// CHECK-NEXT: entry: +// CHECK-NEXT:[[A_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT:store ptr [[A:%.*]], ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8 +// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 0) ] +// CHECK-NEXT:store ptr [[TMP0]], ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[TMP3:%.*]] = load ptr, ptr [[A_ADDR]], align 8 +// CHECK-NEXT:[[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 0 +// CHECK-NEXT:[[TMP4:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 +// CHECK-NEXT:ret i32 [[TMP4]] +void *test1(void *a) { return __builtin_assume_aligned(a, 32, get_align()); } >From ada1d827164472676fc3cc36fb8b0bca5e053286 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 00:37:25 +0800 Subject: [PATCH 2/3] support constexpr alignment of __builtin_assume_aligned. --- clang/lib/CodeGen/CGBuiltin.cpp | 20 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index d57f491a20c8e..bff5451a01300 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -3829,14 +3829,18 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, (E->getNumArgs() > 2) ? EmitScalarExpr(E->getArg(2)) : nullptr; Value *AlignmentValue = EmitScalarExpr(E->getArg(1)); -ConstantInt *AlignmentCI = cast(AlignmentValue); -if (AlignmentCI->getValue().ugt(llvm::Value::MaximumAlignment)) - AlignmentCI = ConstantInt::get(AlignmentCI->getIntegerType(), - llvm::Value::MaximumAlignment); - -emitAlignmentAssumption(PtrValue, Ptr, -/*The expr loc is sufficient.*/ SourceLocation(), -AlignmentCI, OffsetValue); +if (ConstantInt *AlignmentCI = cast(AlignmentValue)) { + if (AlignmentCI->getValue().ugt(llvm::Value::MaximumAlignment)) +AlignmentCI = ConstantInt::get(AlignmentCI->getIntegerType(), + llvm::Value::MaximumAlignment); + + emitAlignmentAssumption(PtrValue, Ptr, + /*The expr loc is sufficient.*/ SourceLocation(), + AlignmentCI, OffsetValue); +} else + emitAlignmentAssumption(PtrValue, Ptr, + /*The expr loc is sufficient.*/ SourceLocation(), + AlignmentValue, OffsetValue); return RValue::get(PtrValue); } case Builtin::BI__builtin_assume_dereferenceable: { >From eb5e0ed71165fcf90f0bfd54daa6642e4c17a0a4 Mon Sep 17 00:00:00 2001 From: Tang Jiajun <1220586...@qq.com> Date: Sat, 15 Feb 2025 01:17:26 +0800 Subject: [PATCH 3/3] Update builtin-assume-aligned.cpp --- clang/test/CodeGen/builtin-assume-aligned.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/test/CodeGen/builtin-assume-aligned.cpp b/clang/test/CodeGen/builtin-assume-aligned.cpp index fae4221d7d7e7..63ff01c98ccdc 100644 --- a/clang/test/CodeGen/builtin-assume-aligned.cpp +++ b/clang/test/CodeGen/builtin-assume-aligned.cpp @@ -3,12 +3,13 @@ constexpr int get_align() { return 1; } -// CHECK-LABEL: @Ztest1P( +// CHECK-LABEL: @_Z5test1Pv( // CHECK-NEXT: entry: // CHECK-NEXT:[[A_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT:store ptr [[A:%.*]], ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8 -// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 0) ] +// CHECK-NEXT:[[TMP1:%.*]] = call noundef i32 @_Z9get_alignv() +// CHECK-NEXT:call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 32, i64 [[TMP1]]) ] // CHECK-NEXT:store ptr [[TMP0]], ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[TMP3:%.*]] = load ptr, ptr [[A_ADDR]], align 8 // CHECK-NEXT:[[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 0 _
[clang] [clang] Support constexpr alignment of __builtin_assume_aligned. (PR #127223)
tangjj11 wrote: > This is not the right fix. > > After we check the constant expression in Sema, we should create a > ConstantExpr containing the the evaluated value, so we don't need to > re-evaluate it later. thanks, I will close the PR. https://github.com/llvm/llvm-project/pull/127223 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] [CUDA] Support calling `consteval` function between different target. (PR #158688)
tangjj11 wrote: > Thank you for this PR! Will you need us to land it for you? Yes, thanks. https://github.com/llvm/llvm-project/pull/158688 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] [CUDA] Support calling consteval function between different target. (PR #158688)
https://github.com/tangjj11 edited https://github.com/llvm/llvm-project/pull/158688 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] [CUDA] Support calling consteval function between different target. (PR #158688)
https://github.com/tangjj11 created https://github.com/llvm/llvm-project/pull/158688 None >From bea389e7b7706470ec021cf027f6433ed2b16774 Mon Sep 17 00:00:00 2001 From: tangjj11 <1220586...@qq.com> Date: Mon, 15 Sep 2025 22:57:52 +0800 Subject: [PATCH] [clang] [CUDA] Support calling consteval function between different target. --- clang/lib/Sema/SemaCUDA.cpp | 3 +++ clang/test/SemaCUDA/consteval-func.cu | 8 2 files changed, 11 insertions(+) create mode 100644 clang/test/SemaCUDA/consteval-func.cu diff --git a/clang/lib/Sema/SemaCUDA.cpp b/clang/lib/Sema/SemaCUDA.cpp index 0e1bf727d72d2..6c564383f0563 100644 --- a/clang/lib/Sema/SemaCUDA.cpp +++ b/clang/lib/Sema/SemaCUDA.cpp @@ -143,6 +143,9 @@ CUDAFunctionTarget SemaCUDA::IdentifyTarget(const FunctionDecl *D, if (D->hasAttr()) return CUDAFunctionTarget::Global; + if (D->isConsteval()) +return CUDAFunctionTarget::HostDevice; + if (hasAttr(D, IgnoreImplicitHDAttr)) { if (hasAttr(D, IgnoreImplicitHDAttr)) return CUDAFunctionTarget::HostDevice; diff --git a/clang/test/SemaCUDA/consteval-func.cu b/clang/test/SemaCUDA/consteval-func.cu new file mode 100644 index 0..293c1ce85830a --- /dev/null +++ b/clang/test/SemaCUDA/consteval-func.cu @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %s + +// expected-no-diagnostics + +#include "Inputs/cuda.h" + +__device__ consteval int f() { return 0; } +int main() { return f(); } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] [CUDA] Support calling `consteval` function between different target. (PR #158688)
https://github.com/tangjj11 updated https://github.com/llvm/llvm-project/pull/158688 >From bea389e7b7706470ec021cf027f6433ed2b16774 Mon Sep 17 00:00:00 2001 From: tangjj11 <1220586...@qq.com> Date: Mon, 15 Sep 2025 22:57:52 +0800 Subject: [PATCH 1/2] [clang] [CUDA] Support calling consteval function between different target. --- clang/lib/Sema/SemaCUDA.cpp | 3 +++ clang/test/SemaCUDA/consteval-func.cu | 8 2 files changed, 11 insertions(+) create mode 100644 clang/test/SemaCUDA/consteval-func.cu diff --git a/clang/lib/Sema/SemaCUDA.cpp b/clang/lib/Sema/SemaCUDA.cpp index 0e1bf727d72d2..6c564383f0563 100644 --- a/clang/lib/Sema/SemaCUDA.cpp +++ b/clang/lib/Sema/SemaCUDA.cpp @@ -143,6 +143,9 @@ CUDAFunctionTarget SemaCUDA::IdentifyTarget(const FunctionDecl *D, if (D->hasAttr()) return CUDAFunctionTarget::Global; + if (D->isConsteval()) +return CUDAFunctionTarget::HostDevice; + if (hasAttr(D, IgnoreImplicitHDAttr)) { if (hasAttr(D, IgnoreImplicitHDAttr)) return CUDAFunctionTarget::HostDevice; diff --git a/clang/test/SemaCUDA/consteval-func.cu b/clang/test/SemaCUDA/consteval-func.cu new file mode 100644 index 0..293c1ce85830a --- /dev/null +++ b/clang/test/SemaCUDA/consteval-func.cu @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %s + +// expected-no-diagnostics + +#include "Inputs/cuda.h" + +__device__ consteval int f() { return 0; } +int main() { return f(); } >From ca76a1f180af88ac92410ab88ee38c47c273ea7f Mon Sep 17 00:00:00 2001 From: tangjj11 <1220586...@qq.com> Date: Tue, 16 Sep 2025 21:40:37 +0800 Subject: [PATCH 2/2] Add release note. --- clang/docs/ReleaseNotes.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 5c69415d16489..c7583f5d6dbc8 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -225,6 +225,8 @@ CUDA/HIP Language Changes CUDA Support +Support calling `consteval` function between different target. + AIX Support ^^^ ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] [CUDA] Support calling `consteval` function between different target. (PR #158688)
https://github.com/tangjj11 edited https://github.com/llvm/llvm-project/pull/158688 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits