https://github.com/fmayer updated 
https://github.com/llvm/llvm-project/pull/134310

>From 44f9ccd6b4104fb07ad9cf9581c41c6d473525ec Mon Sep 17 00:00:00 2001
From: Florian Mayer <fma...@google.com>
Date: Thu, 3 Apr 2025 14:53:29 -0700
Subject: [PATCH 1/3] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.4
---
 clang/lib/CodeGen/CGExpr.cpp          |  7 ++++--
 clang/test/CodeGen/ubsan-trap-merge.c | 32 +++++++++++++--------------
 2 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 3d3a111f0514a..56e5654bcf7e0 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -3977,16 +3977,19 @@ void CodeGenFunction::EmitTrapCheck(llvm::Value 
*Checked,
   NoMerge = NoMerge || !CGM.getCodeGenOpts().OptimizationLevel ||
             (CurCodeDecl && CurCodeDecl->hasAttr<OptimizeNoneAttr>());
 
+  llvm::MDBuilder MDHelper(getLLVMContext());
   if (TrapBB && !NoMerge) {
     auto Call = TrapBB->begin();
     assert(isa<llvm::CallInst>(Call) && "Expected call in trap BB");
 
     Call->applyMergedLocation(Call->getDebugLoc(),
                               Builder.getCurrentDebugLocation());
-    Builder.CreateCondBr(Checked, Cont, TrapBB);
+    Builder.CreateCondBr(Checked, Cont, TrapBB,
+                         MDHelper.createLikelyBranchWeights());
   } else {
     TrapBB = createBasicBlock("trap");
-    Builder.CreateCondBr(Checked, Cont, TrapBB);
+    Builder.CreateCondBr(Checked, Cont, TrapBB,
+                         MDHelper.createLikelyBranchWeights());
     EmitBlock(TrapBB);
 
     llvm::CallInst *TrapCall =
diff --git a/clang/test/CodeGen/ubsan-trap-merge.c 
b/clang/test/CodeGen/ubsan-trap-merge.c
index 486aa55f5b811..12344affe3ad6 100644
--- a/clang/test/CodeGen/ubsan-trap-merge.c
+++ b/clang/test/CodeGen/ubsan-trap-merge.c
@@ -1,3 +1,4 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py 
UTC_ARGS: --version 5
 // NOTE: Assertions have mostly been autogenerated by 
utils/update_cc_test_checks.py UTC_ARGS: --version 5
 // The most important assertions are the attributes at the end of the file, 
which
 // show whether -ubsan-unique-traps and -fno-sanitize-merge attach 'nomerge'
@@ -64,7 +65,7 @@
 // TRAP-NOMERGE-NEXT:  [[ENTRY:.*:]]
 // TRAP-NOMERGE-NEXT:    [[TMP0:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[X]], i32 125), !nosanitize [[META2:![0-9]+]]
 // TRAP-NOMERGE-NEXT:    [[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1, 
!nosanitize [[META2]]
-// TRAP-NOMERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label 
%[[CONT:.*]], !nosanitize [[META2]]
+// TRAP-NOMERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label 
%[[CONT:.*]], !prof [[PROF3:![0-9]+]], !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[TRAP]]:
 // TRAP-NOMERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) 
#[[ATTR4:[0-9]+]], !nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -104,7 +105,7 @@
 // TRAP-MERGE-NEXT:  [[ENTRY:.*:]]
 // TRAP-MERGE-NEXT:    [[TMP0:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[X]], i32 125), !nosanitize [[META2:![0-9]+]]
 // TRAP-MERGE-NEXT:    [[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1, 
!nosanitize [[META2]]
-// TRAP-MERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label %[[CONT:.*]], 
!nosanitize [[META2]]
+// TRAP-MERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label %[[CONT:.*]], 
!prof [[PROF3:![0-9]+]], !nosanitize [[META2]]
 // TRAP-MERGE:       [[TRAP]]:
 // TRAP-MERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4:[0-9]+]], 
!nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -187,7 +188,7 @@ int f(int x) {
 // TRAP-NOMERGE-NEXT:  [[ENTRY:.*:]]
 // TRAP-NOMERGE-NEXT:    [[TMP0:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[X]], i32 127), !nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    [[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1, 
!nosanitize [[META2]]
-// TRAP-NOMERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label 
%[[CONT:.*]], !nosanitize [[META2]]
+// TRAP-NOMERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label 
%[[CONT:.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[TRAP]]:
 // TRAP-NOMERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -227,7 +228,7 @@ int f(int x) {
 // TRAP-MERGE-NEXT:  [[ENTRY:.*:]]
 // TRAP-MERGE-NEXT:    [[TMP0:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[X]], i32 127), !nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    [[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1, 
!nosanitize [[META2]]
-// TRAP-MERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label %[[CONT:.*]], 
!nosanitize [[META2]]
+// TRAP-MERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label %[[CONT:.*]], 
!prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-MERGE:       [[TRAP]]:
 // TRAP-MERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -317,14 +318,14 @@ int g(int x) {
 // TRAP-NOMERGE-NEXT:  [[ENTRY:.*:]]
 // TRAP-NOMERGE-NEXT:    [[TMP0:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[X]], i32 127), !nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    [[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1, 
!nosanitize [[META2]]
-// TRAP-NOMERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label 
%[[CONT:.*]], !nosanitize [[META2]]
+// TRAP-NOMERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label 
%[[CONT:.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[TRAP]]:
 // TRAP-NOMERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    unreachable, !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[CONT]]:
 // TRAP-NOMERGE-NEXT:    [[TMP2:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[Y]], i32 129), !nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, 
!nosanitize [[META2]]
-// TRAP-NOMERGE-NEXT:    br i1 [[TMP3]], label %[[TRAP1:.*]], label 
%[[CONT2:.*]], !nosanitize [[META2]]
+// TRAP-NOMERGE-NEXT:    br i1 [[TMP3]], label %[[TRAP1:.*]], label 
%[[CONT2:.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[TRAP1]]:
 // TRAP-NOMERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -385,14 +386,14 @@ int g(int x) {
 // TRAP-MERGE-NEXT:  [[ENTRY:.*:]]
 // TRAP-MERGE-NEXT:    [[TMP0:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[X]], i32 127), !nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    [[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1, 
!nosanitize [[META2]]
-// TRAP-MERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label %[[CONT:.*]], 
!nosanitize [[META2]]
+// TRAP-MERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP:.*]], label %[[CONT:.*]], 
!prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-MERGE:       [[TRAP]]:
 // TRAP-MERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    unreachable, !nosanitize [[META2]]
 // TRAP-MERGE:       [[CONT]]:
 // TRAP-MERGE-NEXT:    [[TMP2:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[Y]], i32 129), !nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, 
!nosanitize [[META2]]
-// TRAP-MERGE-NEXT:    br i1 [[TMP3]], label %[[TRAP]], label %[[CONT1:.*]], 
!nosanitize [[META2]]
+// TRAP-MERGE-NEXT:    br i1 [[TMP3]], label %[[TRAP]], label %[[CONT1:.*]], 
!prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-MERGE:       [[CONT1]]:
 // TRAP-MERGE-NEXT:    [[TMP4:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, 
!nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    [[TMP5:%.*]] = extractvalue { i32, i1 } [[TMP0]], 0, 
!nosanitize [[META2]]
@@ -546,14 +547,14 @@ int h(int x, int y) {
 // TRAP-NOMERGE-NEXT:  [[ENTRY:.*:]]
 // TRAP-NOMERGE-NEXT:    [[TMP0:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[X]], i32 125), !nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    [[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1, 
!nosanitize [[META2]]
-// TRAP-NOMERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP_I:.*]], label 
%[[F_EXIT:.*]], !nosanitize [[META2]]
+// TRAP-NOMERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP_I:.*]], label 
%[[F_EXIT:.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[TRAP_I]]:
 // TRAP-NOMERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    unreachable, !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[F_EXIT]]:
 // TRAP-NOMERGE-NEXT:    [[TMP2:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[Y]], i32 127), !nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, 
!nosanitize [[META2]]
-// TRAP-NOMERGE-NEXT:    br i1 [[TMP3]], label %[[TRAP_I2:.*]], label 
%[[G_EXIT:.*]], !nosanitize [[META2]]
+// TRAP-NOMERGE-NEXT:    br i1 [[TMP3]], label %[[TRAP_I2:.*]], label 
%[[G_EXIT:.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[TRAP_I2]]:
 // TRAP-NOMERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -562,7 +563,7 @@ int h(int x, int y) {
 // TRAP-NOMERGE-NEXT:    [[TMP5:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, 
!nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    [[TMP6:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[TMP4]], i32 [[TMP5]]), !nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    [[TMP7:%.*]] = extractvalue { i32, i1 } [[TMP6]], 1, 
!nosanitize [[META2]]
-// TRAP-NOMERGE-NEXT:    br i1 [[TMP7]], label %[[TRAP:.*]], label 
%[[CONT:.*]], !nosanitize [[META2]]
+// TRAP-NOMERGE-NEXT:    br i1 [[TMP7]], label %[[TRAP:.*]], label 
%[[CONT:.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-NOMERGE:       [[TRAP]]:
 // TRAP-NOMERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-NOMERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -637,14 +638,14 @@ int h(int x, int y) {
 // TRAP-MERGE-NEXT:  [[ENTRY:.*:]]
 // TRAP-MERGE-NEXT:    [[TMP0:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[X]], i32 125), !nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    [[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1, 
!nosanitize [[META2]]
-// TRAP-MERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP_I:.*]], label 
%[[F_EXIT:.*]], !nosanitize [[META2]]
+// TRAP-MERGE-NEXT:    br i1 [[TMP1]], label %[[TRAP_I:.*]], label 
%[[F_EXIT:.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-MERGE:       [[TRAP_I]]:
 // TRAP-MERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    unreachable, !nosanitize [[META2]]
 // TRAP-MERGE:       [[F_EXIT]]:
 // TRAP-MERGE-NEXT:    [[TMP2:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[Y]], i32 127), !nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, 
!nosanitize [[META2]]
-// TRAP-MERGE-NEXT:    br i1 [[TMP3]], label %[[TRAP_I2:.*]], label 
%[[G_EXIT:.*]], !nosanitize [[META2]]
+// TRAP-MERGE-NEXT:    br i1 [[TMP3]], label %[[TRAP_I2:.*]], label 
%[[G_EXIT:.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-MERGE:       [[TRAP_I2]]:
 // TRAP-MERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -653,7 +654,7 @@ int h(int x, int y) {
 // TRAP-MERGE-NEXT:    [[TMP5:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, 
!nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    [[TMP6:%.*]] = tail call { i32, i1 } 
@llvm.sadd.with.overflow.i32(i32 [[TMP4]], i32 [[TMP5]]), !nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    [[TMP7:%.*]] = extractvalue { i32, i1 } [[TMP6]], 1, 
!nosanitize [[META2]]
-// TRAP-MERGE-NEXT:    br i1 [[TMP7]], label %[[TRAP:.*]], label %[[CONT:.*]], 
!nosanitize [[META2]]
+// TRAP-MERGE-NEXT:    br i1 [[TMP7]], label %[[TRAP:.*]], label %[[CONT:.*]], 
!prof [[PROF3]], !nosanitize [[META2]]
 // TRAP-MERGE:       [[TRAP]]:
 // TRAP-MERGE-NEXT:    tail call void @llvm.ubsantrap(i8 0) #[[ATTR4]], 
!nosanitize [[META2]]
 // TRAP-MERGE-NEXT:    unreachable, !nosanitize [[META2]]
@@ -727,9 +728,6 @@ int m(int x, int y) {
   return f(x) + g(y);
 }
 
-// TRAP-MERGE: attributes #[[ATTR4]] = { noreturn nounwind }
-// HANDLER-MERGE: attributes #[[ATTR4]] = { noreturn nounwind }
-// MINRT-MERGE: attributes #[[ATTR4]] = { noreturn nounwind }
 
 // TRAP-NOMERGE: attributes #[[ATTR4]] = { nomerge noreturn nounwind }
 // HANDLER-NOMERGE: attributes #[[ATTR4]] = { nomerge noreturn nounwind }

>From bd6a5c817f53f47385bfe03e52dd7f9e23db82ce Mon Sep 17 00:00:00 2001
From: Florian Mayer <fma...@google.com>
Date: Thu, 3 Apr 2025 14:54:16 -0700
Subject: [PATCH 2/3] comment

Created using spr 1.3.4
---
 clang/test/CodeGen/ubsan-trap-merge.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/clang/test/CodeGen/ubsan-trap-merge.c 
b/clang/test/CodeGen/ubsan-trap-merge.c
index 12344affe3ad6..d44cced21f409 100644
--- a/clang/test/CodeGen/ubsan-trap-merge.c
+++ b/clang/test/CodeGen/ubsan-trap-merge.c
@@ -1,4 +1,3 @@
-// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py 
UTC_ARGS: --version 5
 // NOTE: Assertions have mostly been autogenerated by 
utils/update_cc_test_checks.py UTC_ARGS: --version 5
 // The most important assertions are the attributes at the end of the file, 
which
 // show whether -ubsan-unique-traps and -fno-sanitize-merge attach 'nomerge'

>From 04eedf7e747d3e31e771410450f55a95c7788ab6 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fma...@google.com>
Date: Thu, 3 Apr 2025 14:57:10 -0700
Subject: [PATCH 3/3] test

Created using spr 1.3.4
---
 clang/test/CodeGen/ubsan-trap-merge.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/clang/test/CodeGen/ubsan-trap-merge.c 
b/clang/test/CodeGen/ubsan-trap-merge.c
index d44cced21f409..8016048f6a502 100644
--- a/clang/test/CodeGen/ubsan-trap-merge.c
+++ b/clang/test/CodeGen/ubsan-trap-merge.c
@@ -731,3 +731,7 @@ int m(int x, int y) {
 // TRAP-NOMERGE: attributes #[[ATTR4]] = { nomerge noreturn nounwind }
 // HANDLER-NOMERGE: attributes #[[ATTR4]] = { nomerge noreturn nounwind }
 // MINRT-NOMERGE: attributes #[[ATTR4]] = { nomerge noreturn nounwind }
+
+// TRAP-NOMERGE: [[PROF3]] = !{!"branch_weights", i32 1, i32 1048575}
+// HANDLER-NOMERGE: [[PROF3]] = !{!"branch_weights", i32 1, i32 1048575}
+// MINRT-NOMERGE: [[PROF3]] = !{!"branch_weights", i32 1, i32 1048575}

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to