[clang] [clang] Support constexpr alignment of __builtin_assume_aligned. (PR #127223)

2025-02-14 Thread Tang Jiajun via cfe-commits

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)

2025-02-14 Thread Tang Jiajun via cfe-commits

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)

2025-02-14 Thread Tang Jiajun via cfe-commits

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)

2025-02-14 Thread Tang Jiajun via cfe-commits

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)

2025-02-14 Thread Tang Jiajun via cfe-commits

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)

2025-02-14 Thread Tang Jiajun via cfe-commits

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)

2025-09-16 Thread Tang Jiajun via cfe-commits

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)

2025-09-15 Thread Tang Jiajun via cfe-commits

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)

2025-09-15 Thread Tang Jiajun via cfe-commits

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)

2025-09-16 Thread Tang Jiajun via cfe-commits

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)

2025-09-16 Thread Tang Jiajun via cfe-commits

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