diff --git a/clang/test/BoundsSafety/CodeGen/access-size-check-elt-size.c b/clang/test/BoundsSafety/CodeGen/access-size-check-elt-size.c index 633e3d803d1d5..9a4eaeb8208c2 100644 --- a/clang/test/BoundsSafety/CodeGen/access-size-check-elt-size.c +++ b/clang/test/BoundsSafety/CodeGen/access-size-check-elt-size.c @@ -25,16 +25,16 @@ // NEW-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META2:![0-9]+]] -// NEW-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: -// NEW-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3:![0-9]+]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4:![0-9]+]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP1]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT2]]: // NEW-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX]], align 1 // NEW-NEXT: ret i8 [[TMP3]] @@ -58,16 +58,16 @@ // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META2:![0-9]+]] -// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // LEGACY-NEXT: unreachable, !annotation [[META2]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3:![0-9]+]] -// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4:![0-9]+]] +// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // LEGACY: [[TRAP1]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// LEGACY-NEXT: unreachable, !annotation [[META3]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// LEGACY-NEXT: unreachable, !annotation [[META4]] // LEGACY: [[CONT2]]: // LEGACY-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX]], align 1 // LEGACY-NEXT: ret i8 [[TMP3]] @@ -94,24 +94,24 @@ uint8_t access_uint8(uint8_t* __bidi_indexable ptr, int idx) { // NEW-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8 // NEW-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP]], i32 0, i32 2 // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 -// NEW-NEXT: [[TMP1:%.*]] = getelementptr i16, ptr [[ARRAYIDX]], i64 1, !annotation [[META4:![0-9]+]] -// NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[WIDE_PTR_UB]], !annotation [[META4]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// NEW-NEXT: [[TMP1:%.*]] = getelementptr i16, ptr [[ARRAYIDX]], i64 1, !annotation [[META5:![0-9]+]] +// NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[WIDE_PTR_UB]], !annotation [[META5]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // NEW: [[TRAP]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// NEW-NEXT: unreachable, !annotation [[META4]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// NEW-NEXT: unreachable, !annotation [[META5]] // NEW: [[CONT]]: -// NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP1]], !annotation [[META4]] -// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META4]] +// NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP1]], !annotation [[META5]] +// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META5]] // NEW: [[TRAP1]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// NEW-NEXT: unreachable, !annotation [[META4]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// NEW-NEXT: unreachable, !annotation [[META5]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: [[TMP5:%.*]] = load i16, ptr [[ARRAYIDX]], align 2 // NEW-NEXT: ret i16 [[TMP5]] @@ -135,16 +135,16 @@ uint8_t access_uint8(uint8_t* __bidi_indexable ptr, int idx) { // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META2]] -// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // LEGACY-NEXT: unreachable, !annotation [[META2]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // LEGACY: [[TRAP1]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// LEGACY-NEXT: unreachable, !annotation [[META3]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// LEGACY-NEXT: unreachable, !annotation [[META4]] // LEGACY: [[CONT2]]: // LEGACY-NEXT: [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX]], align 2 // LEGACY-NEXT: ret i16 [[TMP3]] @@ -171,24 +171,24 @@ uint16_t access_uint16(uint16_t* __bidi_indexable ptr, int idx) { // NEW-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8 // NEW-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP]], i32 0, i32 2 // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 -// NEW-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[ARRAYIDX]], i64 1, !annotation [[META4]] -// NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[WIDE_PTR_UB]], !annotation [[META4]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// NEW-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[ARRAYIDX]], i64 1, !annotation [[META5]] +// NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[WIDE_PTR_UB]], !annotation [[META5]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // NEW: [[TRAP]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// NEW-NEXT: unreachable, !annotation [[META4]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// NEW-NEXT: unreachable, !annotation [[META5]] // NEW: [[CONT]]: -// NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP1]], !annotation [[META4]] -// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META4]] +// NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP1]], !annotation [[META5]] +// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META5]] // NEW: [[TRAP1]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// NEW-NEXT: unreachable, !annotation [[META4]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// NEW-NEXT: unreachable, !annotation [[META5]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 // NEW-NEXT: ret i32 [[TMP5]] @@ -212,16 +212,16 @@ uint16_t access_uint16(uint16_t* __bidi_indexable ptr, int idx) { // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META2]] -// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // LEGACY-NEXT: unreachable, !annotation [[META2]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // LEGACY: [[TRAP1]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// LEGACY-NEXT: unreachable, !annotation [[META3]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// LEGACY-NEXT: unreachable, !annotation [[META4]] // LEGACY: [[CONT2]]: // LEGACY-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 // LEGACY-NEXT: ret i32 [[TMP3]] @@ -248,24 +248,24 @@ uint32_t access_uint32(uint32_t* __bidi_indexable ptr, int idx) { // NEW-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8 // NEW-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.2", ptr [[AGG_TEMP]], i32 0, i32 2 // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 -// NEW-NEXT: [[TMP1:%.*]] = getelementptr i64, ptr [[ARRAYIDX]], i64 1, !annotation [[META4]] -// NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[WIDE_PTR_UB]], !annotation [[META4]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// NEW-NEXT: [[TMP1:%.*]] = getelementptr i64, ptr [[ARRAYIDX]], i64 1, !annotation [[META5]] +// NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[WIDE_PTR_UB]], !annotation [[META5]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // NEW: [[TRAP]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// NEW-NEXT: unreachable, !annotation [[META4]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// NEW-NEXT: unreachable, !annotation [[META5]] // NEW: [[CONT]]: -// NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP1]], !annotation [[META4]] -// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META4]] +// NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP1]], !annotation [[META5]] +// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META5]] // NEW: [[TRAP1]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// NEW-NEXT: unreachable, !annotation [[META4]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// NEW-NEXT: unreachable, !annotation [[META5]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: [[TMP5:%.*]] = load i64, ptr [[ARRAYIDX]], align 8 // NEW-NEXT: ret i64 [[TMP5]] @@ -289,16 +289,16 @@ uint32_t access_uint32(uint32_t* __bidi_indexable ptr, int idx) { // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.2", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META2]] -// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // LEGACY-NEXT: unreachable, !annotation [[META2]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // LEGACY: [[TRAP1]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// LEGACY-NEXT: unreachable, !annotation [[META3]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// LEGACY-NEXT: unreachable, !annotation [[META4]] // LEGACY: [[CONT2]]: // LEGACY-NEXT: [[TMP3:%.*]] = load i64, ptr [[ARRAYIDX]], align 8 // LEGACY-NEXT: ret i64 [[TMP3]] @@ -309,9 +309,11 @@ uint64_t access_uint64(uint64_t* __bidi_indexable ptr, int idx) { //. // NEW: [[META2]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// NEW: [[META3]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} -// NEW: [[META4]] = !{!"bounds-safety-check-ptr-le-upper-bound"} +// NEW: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// NEW: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// NEW: [[META5]] = !{!"bounds-safety-check-ptr-le-upper-bound"} //. // LEGACY: [[META2]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// LEGACY: [[META3]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// LEGACY: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// LEGACY: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/access-size-check-unsized-elt.c b/clang/test/BoundsSafety/CodeGen/access-size-check-unsized-elt.c index 1cc2a6c6e04a9..2cce8cb848a47 100644 --- a/clang/test/BoundsSafety/CodeGen/access-size-check-unsized-elt.c +++ b/clang/test/BoundsSafety/CodeGen/access-size-check-unsized-elt.c @@ -1,5 +1,5 @@ -// REQUIRES: system-darwin // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 +// REQUIRES: system-darwin // RUN: %clang_cc1 -O0 -fbounds-safety -fbounds-safety-bringup-missing-checks=access_size -triple arm64-apple-iphoneos -emit-llvm %s -o - | FileCheck --check-prefix ACCESS-SIZE %s // RUN: %clang_cc1 -O0 -fbounds-safety -fno-bounds-safety-bringup-missing-checks=access_size -triple arm64-apple-iphoneos -emit-llvm %s -o - | FileCheck --check-prefix ACCESS-SIZE %s #include @@ -42,16 +42,16 @@ void receive(fn_t); // ACCESS-SIZE-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT9:.*]], !annotation [[META2]] // ACCESS-SIZE: [[BOUNDSCHECK_NOTNULL]]: // ACCESS-SIZE-NEXT: [[TMP4:%.*]] = icmp ult ptr [[WIDE_PTR_PTR3]], [[WIDE_PTR_UB5]], !annotation [[META3:![0-9]+]] -// ACCESS-SIZE-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// ACCESS-SIZE-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4:![0-9]+]], !annotation [[META3]] // ACCESS-SIZE: [[TRAP]]: // ACCESS-SIZE-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META3]] // ACCESS-SIZE-NEXT: unreachable, !annotation [[META3]] // ACCESS-SIZE: [[CONT]]: -// ACCESS-SIZE-NEXT: [[TMP5:%.*]] = icmp uge ptr [[WIDE_PTR_PTR3]], [[WIDE_PTR_LB7]], !annotation [[META4:![0-9]+]] -// ACCESS-SIZE-NEXT: br i1 [[TMP5]], label %[[CONT9]], label %[[TRAP8:.*]], !annotation [[META4]] +// ACCESS-SIZE-NEXT: [[TMP5:%.*]] = icmp uge ptr [[WIDE_PTR_PTR3]], [[WIDE_PTR_LB7]], !annotation [[META5:![0-9]+]] +// ACCESS-SIZE-NEXT: br i1 [[TMP5]], label %[[CONT9]], label %[[TRAP8:.*]], !prof [[PROF4]], !annotation [[META5]] // ACCESS-SIZE: [[TRAP8]]: -// ACCESS-SIZE-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]] -// ACCESS-SIZE-NEXT: unreachable, !annotation [[META4]] +// ACCESS-SIZE-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] +// ACCESS-SIZE-NEXT: unreachable, !annotation [[META5]] // ACCESS-SIZE: [[CONT9]]: // ACCESS-SIZE-NEXT: store ptr [[WIDE_PTR_PTR3]], ptr [[F]], align 8 // ACCESS-SIZE-NEXT: [[TMP6:%.*]] = load ptr, ptr [[F]], align 8 @@ -73,5 +73,6 @@ void borked(void) //. // ACCESS-SIZE: [[META2]] = !{!"bounds-safety-check-ptr-neq-null"} // ACCESS-SIZE: [[META3]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// ACCESS-SIZE: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// ACCESS-SIZE: [[PROF4]] = !{!"branch_weights", i32 1048575, i32 1} +// ACCESS-SIZE: [[META5]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/array_subscript_agg.c b/clang/test/BoundsSafety/CodeGen/array_subscript_agg.c index 86114d8103cc1..cb7869dc0d795 100644 --- a/clang/test/BoundsSafety/CodeGen/array_subscript_agg.c +++ b/clang/test/BoundsSafety/CodeGen/array_subscript_agg.c @@ -32,22 +32,22 @@ struct Foo { // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP1:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2:![0-9]+]] // NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP1]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3:![0-9]+]] -// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4:![0-9]+]] +// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP5:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -108,22 +108,22 @@ struct Foo access_Foo_bi(struct Foo* __bidi_indexable ptr, int idx) { // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP5:%.*]] = icmp ule ptr [[TMP4]], [[WIDE_PTR_UB5]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP6:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP4]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP6]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP6]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP6]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT7]]: -// NEW-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT9:.*]], label %[[TRAP8:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT9:.*]], label %[[TRAP8:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP8]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT9]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP8:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -195,22 +195,22 @@ struct Foo access_Foo_idx(struct Foo* __indexable ptr, int idx) { // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP6:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP7:%.*]] = icmp ule ptr [[TMP6]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP8:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP6]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP8]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP8]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP9:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP9]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP9:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP9]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP10:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -263,8 +263,8 @@ struct Foo access_Foo_cb(struct Foo* __counted_by(count) ptr, int idx, int count // NEW-NEXT: store i32 [[COUNT]], ptr [[COUNT_ADDR]], align 4 // NEW-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // NEW-NEXT: [[TMP1:%.*]] = load i32, ptr [[COUNT_ADDR]], align 4 -// NEW-NEXT: [[TMP2:%.*]] = icmp ne ptr [[TMP0]], null, !annotation [[META4:![0-9]+]] -// NEW-NEXT: br i1 [[TMP2]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// NEW-NEXT: [[TMP2:%.*]] = icmp ne ptr [[TMP0]], null, !annotation [[META5:![0-9]+]] +// NEW-NEXT: br i1 [[TMP2]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // NEW: [[BOUNDSCHECK_NOTNULL]]: // NEW-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP1]] to i64 // NEW-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds [[STRUCT_FOO]], ptr [[TMP0]], i64 [[IDX_EXT]] @@ -295,22 +295,22 @@ struct Foo access_Foo_cb(struct Foo* __counted_by(count) ptr, int idx, int count // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP11:%.*]] = icmp ule ptr [[TMP10]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP12:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP10]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP12]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP12]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP13:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP13]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP13:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP13]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP14:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -395,22 +395,22 @@ struct Foo access_Foo_cbon(struct Foo* __counted_by_or_null(count) ptr, int idx, // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP6:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP7:%.*]] = icmp ule ptr [[TMP6]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP8:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP6]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP8]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP8]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP9:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP9]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP9:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP9]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP10:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -463,8 +463,8 @@ struct Foo access_Foo_sb(struct Foo* __sized_by(count) ptr, int idx, int count) // NEW-NEXT: store i32 [[COUNT]], ptr [[COUNT_ADDR]], align 4 // NEW-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // NEW-NEXT: [[TMP1:%.*]] = load i32, ptr [[COUNT_ADDR]], align 4 -// NEW-NEXT: [[TMP2:%.*]] = icmp ne ptr [[TMP0]], null, !annotation [[META4]] -// NEW-NEXT: br i1 [[TMP2]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// NEW-NEXT: [[TMP2:%.*]] = icmp ne ptr [[TMP0]], null, !annotation [[META5]] +// NEW-NEXT: br i1 [[TMP2]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // NEW: [[BOUNDSCHECK_NOTNULL]]: // NEW-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP1]] to i64 // NEW-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 [[IDX_EXT]] @@ -495,22 +495,22 @@ struct Foo access_Foo_sb(struct Foo* __sized_by(count) ptr, int idx, int count) // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP11:%.*]] = icmp ule ptr [[TMP10]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP12:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP10]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP12]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP12]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP13:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP13]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP13:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP13]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP14:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -597,22 +597,22 @@ struct Foo access_Foo_sbon(struct Foo* __sized_by_or_null(count) ptr, int idx, i // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP8:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP9:%.*]] = icmp ule ptr [[TMP8]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP9]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP9]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP10:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP8]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP10]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP10]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP11:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP11]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP11:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP11]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP12:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -682,22 +682,22 @@ struct Foo access_Foo_var_array_size(int count, struct Foo ptr[count], int idx) // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP5:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP6:%.*]] = icmp ule ptr [[TMP5]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP7:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP5]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP8:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP8]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP8:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP8]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP9:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -754,22 +754,22 @@ struct NestedArrayOfStructs { // NEW-NEXT: [[ARRAYIDX:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYDECAY]], i64 [[IDXPROM]] // NEW-NEXT: [[TMP2:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[TMP2]], [[UPPER]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP4:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP2]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP4]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP4]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP5:%.*]] = icmp uge ptr [[ARRAYIDX]], [[ARRAYDECAY]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP5]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP5:%.*]] = icmp uge ptr [[ARRAYIDX]], [[ARRAYDECAY]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP5]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP6:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -827,17 +827,17 @@ struct HasFAM { // NEW-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP2]], i32 0, i32 2 // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_HASFAM:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 -// NEW-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META5:![0-9]+]] -// NEW-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META5]] +// NEW-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META6:![0-9]+]] +// NEW-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META6]] // NEW: [[TRAP]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] -// NEW-NEXT: unreachable, !annotation [[META5]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META6]] +// NEW-NEXT: unreachable, !annotation [[META6]] // NEW: [[CONT]]: -// NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: [[FAM:%.*]] = getelementptr inbounds nuw [[STRUCT_HASFAM]], ptr [[WIDE_PTR_PTR]], i32 0, i32 1 // NEW-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [0 x %struct.Foo], ptr [[FAM]], i64 0, i64 0 @@ -865,22 +865,22 @@ struct HasFAM { // NEW-NEXT: [[WIDE_PTR_LB15:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR14]], align 8 // NEW-NEXT: [[TMP8:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP9:%.*]] = icmp ule ptr [[TMP8]], [[WIDE_PTR_UB13]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP9]], label %[[CONT17:.*]], label %[[TRAP16:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP9]], label %[[CONT17:.*]], label %[[TRAP16:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP16]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT17]]: // NEW-NEXT: [[TMP10:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP8]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP10]], label %[[CONT19:.*]], label %[[TRAP18:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP10]], label %[[CONT19:.*]], label %[[TRAP18:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP18]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT19]]: -// NEW-NEXT: [[TMP11:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB15]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP11]], label %[[CONT21:.*]], label %[[TRAP20:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP11:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB15]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP11]], label %[[CONT21:.*]], label %[[TRAP20:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP20]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT21]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP12:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -908,16 +908,16 @@ struct HasFAM { // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_HASFAM:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 // LEGACY-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META3:![0-9]+]] -// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4:![0-9]+]], !annotation [[META3]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META3]] // LEGACY-NEXT: unreachable, !annotation [[META3]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4:![0-9]+]] -// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META4]] +// LEGACY-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META5:![0-9]+]] +// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF4]], !annotation [[META5]] // LEGACY: [[TRAP3]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// LEGACY-NEXT: unreachable, !annotation [[META4]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// LEGACY-NEXT: unreachable, !annotation [[META5]] // LEGACY: [[CONT4]]: // LEGACY-NEXT: [[FAM:%.*]] = getelementptr inbounds nuw [[STRUCT_HASFAM]], ptr [[WIDE_PTR_PTR]], i32 0, i32 1 // LEGACY-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [0 x %struct.Foo], ptr [[FAM]], i64 0, i64 0 @@ -980,22 +980,22 @@ struct Foo access_Foo_from_HasFAM(struct HasFAM* __bidi_indexable has_fam, int i // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP7:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP8:%.*]] = icmp ule ptr [[TMP7]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP9:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP7]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP9]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP9]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP10:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP10]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP10:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP10]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[ARRAYIDX]], i64 8, i1 false) // NEW-NEXT: [[TMP11:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -1054,22 +1054,22 @@ struct Foo access_Foo_eb(struct Foo* __ended_by(end) start, int idx, struct Foo* // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP1:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP3:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP1]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP3]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP4]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_FOO]], ptr [[ARRAYIDX]], i32 0, i32 0 // NEW-NEXT: [[TMP5:%.*]] = load i32, ptr [[X]], align 4 @@ -1094,16 +1094,16 @@ struct Foo access_Foo_eb(struct Foo* __ended_by(end) start, int idx, struct Foo* // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// LEGACY-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4]], !annotation [[META3]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] // LEGACY-NEXT: unreachable, !annotation [[META3]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] -// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META4]] +// LEGACY-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META5]] +// LEGACY-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF4]], !annotation [[META5]] // LEGACY: [[TRAP1]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// LEGACY-NEXT: unreachable, !annotation [[META4]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// LEGACY-NEXT: unreachable, !annotation [[META5]] // LEGACY: [[CONT2]]: // LEGACY-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_FOO]], ptr [[ARRAYIDX]], i32 0, i32 0 // LEGACY-NEXT: [[TMP3:%.*]] = load i32, ptr [[X]], align 4 @@ -1144,22 +1144,22 @@ int access_Foo_member_bi(struct Foo* __bidi_indexable ptr, int idx) { // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP5:%.*]] = icmp ule ptr [[TMP4]], [[WIDE_PTR_UB5]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP6:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP4]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP6]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP6]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP6]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT7]]: -// NEW-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT9:.*]], label %[[TRAP8:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT9:.*]], label %[[TRAP8:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP8]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT9]]: // NEW-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_FOO]], ptr [[ARRAYIDX]], i32 0, i32 0 // NEW-NEXT: [[TMP8:%.*]] = load i32, ptr [[X]], align 4 @@ -1195,16 +1195,16 @@ int access_Foo_member_bi(struct Foo* __bidi_indexable ptr, int idx) { // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP4:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB5]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// LEGACY-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4]], !annotation [[META3]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] // LEGACY-NEXT: unreachable, !annotation [[META3]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP5:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] -// LEGACY-NEXT: br i1 [[TMP5]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !annotation [[META4]] +// LEGACY-NEXT: [[TMP5:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META5]] +// LEGACY-NEXT: br i1 [[TMP5]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !prof [[PROF4]], !annotation [[META5]] // LEGACY: [[TRAP6]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// LEGACY-NEXT: unreachable, !annotation [[META4]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// LEGACY-NEXT: unreachable, !annotation [[META5]] // LEGACY: [[CONT7]]: // LEGACY-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_FOO]], ptr [[ARRAYIDX]], i32 0, i32 0 // LEGACY-NEXT: [[TMP6:%.*]] = load i32, ptr [[X]], align 4 @@ -1245,22 +1245,22 @@ int access_Foo_member_idx(struct Foo* __indexable ptr, int idx) { // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP6:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP7:%.*]] = icmp ule ptr [[TMP6]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP8:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP6]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP8]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP8]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP9:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP9]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP9:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP9]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_FOO]], ptr [[ARRAYIDX]], i32 0, i32 0 // NEW-NEXT: [[TMP10:%.*]] = load i32, ptr [[X]], align 4 @@ -1296,16 +1296,16 @@ int access_Foo_member_idx(struct Foo* __indexable ptr, int idx) { // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP6:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// LEGACY-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4]], !annotation [[META3]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] // LEGACY-NEXT: unreachable, !annotation [[META3]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] -// LEGACY-NEXT: br i1 [[TMP7]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META4]] +// LEGACY-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META5]] +// LEGACY-NEXT: br i1 [[TMP7]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF4]], !annotation [[META5]] // LEGACY: [[TRAP1]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// LEGACY-NEXT: unreachable, !annotation [[META4]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// LEGACY-NEXT: unreachable, !annotation [[META5]] // LEGACY: [[CONT2]]: // LEGACY-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_FOO]], ptr [[ARRAYIDX]], i32 0, i32 0 // LEGACY-NEXT: [[TMP8:%.*]] = load i32, ptr [[X]], align 4 @@ -1351,22 +1351,22 @@ struct MemberIsAgg { // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_MEMBERISAGG]], ptr [[ARRAYIDX]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP5:%.*]] = icmp ule ptr [[TMP4]], [[WIDE_PTR_UB5]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP6:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP4]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP6]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP6]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP6]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT7]]: -// NEW-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT9:.*]], label %[[TRAP8:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT9:.*]], label %[[TRAP8:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP8]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT9]]: // NEW-NEXT: [[AGG:%.*]] = getelementptr inbounds nuw [[STRUCT_MEMBERISAGG]], ptr [[ARRAYIDX]], i32 0, i32 0 // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[AGG]], i64 8, i1 false) @@ -1404,16 +1404,16 @@ struct MemberIsAgg { // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.2", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP4:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB5]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// LEGACY-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4]], !annotation [[META3]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] // LEGACY-NEXT: unreachable, !annotation [[META3]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP5:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] -// LEGACY-NEXT: br i1 [[TMP5]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !annotation [[META4]] +// LEGACY-NEXT: [[TMP5:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META5]] +// LEGACY-NEXT: br i1 [[TMP5]], label %[[CONT7:.*]], label %[[TRAP6:.*]], !prof [[PROF4]], !annotation [[META5]] // LEGACY: [[TRAP6]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// LEGACY-NEXT: unreachable, !annotation [[META4]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// LEGACY-NEXT: unreachable, !annotation [[META5]] // LEGACY: [[CONT7]]: // LEGACY-NEXT: [[AGG:%.*]] = getelementptr inbounds nuw [[STRUCT_MEMBERISAGG]], ptr [[ARRAYIDX]], i32 0, i32 0 // LEGACY-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[AGG]], i64 8, i1 false) @@ -1460,22 +1460,22 @@ struct Foo access_MemberIsAgg_member_bidi(struct MemberIsAgg* __indexable ptr, i // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[WIDE_PTR_PTR]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP11:%.*]] = icmp ule ptr [[TMP10]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP12:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[TMP10]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP12]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP12]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP13:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP13]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP13:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP13]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[WIDE_PTR_PTR]], i64 8, i1 false) // NEW-NEXT: [[TMP14:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -1514,16 +1514,16 @@ struct Foo access_MemberIsAgg_member_bidi(struct MemberIsAgg* __indexable ptr, i // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP10:%.*]] = icmp ult ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// LEGACY-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4]], !annotation [[META3]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] // LEGACY-NEXT: unreachable, !annotation [[META3]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP11:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META4]] -// LEGACY-NEXT: br i1 [[TMP11]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META4]] +// LEGACY-NEXT: [[TMP11:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META5]] +// LEGACY-NEXT: br i1 [[TMP11]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF4]], !annotation [[META5]] // LEGACY: [[TRAP1]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// LEGACY-NEXT: unreachable, !annotation [[META4]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// LEGACY-NEXT: unreachable, !annotation [[META5]] // LEGACY: [[CONT2]]: // LEGACY-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[WIDE_PTR_PTR]], i64 8, i1 false) // LEGACY-NEXT: [[TMP12:%.*]] = load i64, ptr [[RETVAL]], align 4 @@ -1625,22 +1625,22 @@ void compute_addr_with_subscript_Foo_bi(struct Foo* __bidi_indexable ptr, int id // NEW-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // NEW-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[WIDE_PTR_PTR]], i64 1, !annotation [[META2]] // NEW-NEXT: [[TMP11:%.*]] = icmp ule ptr [[TMP10]], [[WIDE_PTR_UB]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT]]: // NEW-NEXT: [[TMP12:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[TMP10]], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP12]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP12]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP1]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] // NEW: [[CONT2]]: -// NEW-NEXT: [[TMP13:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP13]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP13:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP13]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // NEW: [[TRAP3]]: -// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// NEW-NEXT: unreachable, !annotation [[META3]] +// NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// NEW-NEXT: unreachable, !annotation [[META4]] // NEW: [[CONT4]]: // NEW-NEXT: [[TMP14:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[WIDE_PTR_PTR]], i64 1 // NEW-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[F]], i32 0, i32 0 @@ -1684,16 +1684,16 @@ void compute_addr_with_subscript_Foo_bi(struct Foo* __bidi_indexable ptr, int id // LEGACY-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // LEGACY-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // LEGACY-NEXT: [[TMP10:%.*]] = icmp ult ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB]], !annotation [[META3]] -// LEGACY-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// LEGACY-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF4]], !annotation [[META3]] // LEGACY: [[TRAP]]: // LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] // LEGACY-NEXT: unreachable, !annotation [[META3]] // LEGACY: [[CONT]]: -// LEGACY-NEXT: [[TMP11:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META4]] -// LEGACY-NEXT: br i1 [[TMP11]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META4]] +// LEGACY-NEXT: [[TMP11:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META5]] +// LEGACY-NEXT: br i1 [[TMP11]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF4]], !annotation [[META5]] // LEGACY: [[TRAP1]]: -// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] -// LEGACY-NEXT: unreachable, !annotation [[META4]] +// LEGACY-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META5]] +// LEGACY-NEXT: unreachable, !annotation [[META5]] // LEGACY: [[CONT2]]: // LEGACY-NEXT: [[TMP12:%.*]] = getelementptr [[STRUCT_FOO]], ptr [[WIDE_PTR_PTR]], i64 1 // LEGACY-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[F]], i32 0, i32 0 @@ -1711,11 +1711,13 @@ void compute_addr_with_ptr_arith_Foo_bi(struct Foo* __bidi_indexable ptr, int id //. // NEW: [[META2]] = !{!"bounds-safety-check-ptr-le-upper-bound"} -// NEW: [[META3]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} -// NEW: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} -// NEW: [[META5]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} +// NEW: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// NEW: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// NEW: [[META5]] = !{!"bounds-safety-check-ptr-neq-null"} +// NEW: [[META6]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} //. // LEGACY: [[META2]] = !{!"bounds-safety-check-ptr-neq-null"} // LEGACY: [[META3]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// LEGACY: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// LEGACY: [[PROF4]] = !{!"branch_weights", i32 1048575, i32 1} +// LEGACY: [[META5]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/bounds-attributed-in-return-null-system-header-O2.c b/clang/test/BoundsSafety/CodeGen/bounds-attributed-in-return-null-system-header-O2.c index 0d5261df3cae9..c21aa33a0707b 100644 --- a/clang/test/BoundsSafety/CodeGen/bounds-attributed-in-return-null-system-header-O2.c +++ b/clang/test/BoundsSafety/CodeGen/bounds-attributed-in-return-null-system-header-O2.c @@ -10,7 +10,7 @@ void consume(int* __bidi_indexable); // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[BYVAL_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[CMP_I:%.*]] = icmp eq i32 [[COUNT]], 0, !annotation [[META2:![0-9]+]] -// CHECK-NEXT: br i1 [[CMP_I]], label %[[INLINE_HEADER_FUNC_UNSPECIFIED_PTR_EXIT:.*]], label %[[TRAP_I:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP_I]], label %[[INLINE_HEADER_FUNC_UNSPECIFIED_PTR_EXIT:.*]], label %[[TRAP_I:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP_I]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -47,7 +47,7 @@ void use_inline_header_func_unspecified_ptr(int count) { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[BYVAL_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[CMP_I:%.*]] = icmp eq i32 [[COUNT]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP_I]], label %[[INLINE_HEADER_FUNC_UNSAFE_INDEXABLE_PTR_EXIT:.*]], label %[[TRAP_I:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP_I]], label %[[INLINE_HEADER_FUNC_UNSAFE_INDEXABLE_PTR_EXIT:.*]], label %[[TRAP_I:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP_I]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -80,6 +80,7 @@ void use_inline_header_func_unsafe_indexable_ptr(int count) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} //. // LEGACY: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0} // LEGACY: [[META3]] = !{!"p1 int", [[META4:![0-9]+]], i64 0} diff --git a/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O0.c b/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O0.c index 191069ab03c52..bec3d64a933a9 100644 --- a/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O0.c +++ b/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O0.c @@ -1,5 +1,5 @@ -// REQUIRES: system-darwin // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 +// REQUIRES: system-darwin // RUN: %clang_cc1 -O0 -triple arm64-apple-iphoneos -fbounds-safety -fbounds-safety-bringup-missing-checks=return_size -emit-llvm %s -o - | FileCheck %s #include @@ -70,7 +70,7 @@ // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -88,6 +88,9 @@ int *__counted_by(count) cb_in_from_bidi(int count, int *__bidi_indexable p) { return p; } +// + +int *__counted_by(*count) cb_in_from_bidi_redecl(int *count, int *__bidi_indexable p); // CHECK-LABEL: define dso_local ptr @cb_in_from_bidi_redecl( // CHECK-SAME: ptr noundef [[COUNT:%.*]], ptr noundef [[P:%.*]]) #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*]]: @@ -156,7 +159,7 @@ int *__counted_by(count) cb_in_from_bidi(int count, int *__bidi_indexable p) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -170,12 +173,13 @@ int *__counted_by(count) cb_in_from_bidi(int count, int *__bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: ret ptr [[WIDE_PTR_PTR33]] // - -int *__counted_by(*count) cb_in_from_bidi_redecl(int *count, int *__bidi_indexable p); int *__counted_by(*count) cb_in_from_bidi_redecl(int *count, int *__bidi_indexable p) { return p; } +// FIXME: This had to be patched manually. `utils/update_cc_test_checks.py` seems +// to generate CHECK lines here for something that's not a function body and so it +// tries to match the IR for the same function twice. int *__counted_by(*count) cb_in_from_bidi_typeof(int *count, int *__bidi_indexable p); __typeof__(cb_in_from_bidi_typeof) cb_in_from_bidi_typeof; extern __attribute__((weak_import)) __typeof__(cb_in_from_bidi_typeof) cb_in_from_bidi_typeof; @@ -248,7 +252,7 @@ extern __attribute__((weak_import)) __typeof__(cb_in_from_bidi_typeof) cb_in_fro // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -326,7 +330,7 @@ int *__counted_by(*count) cb_in_from_bidi_typeof(int *count, int *__bidi_indexab // CHECK-NEXT: br label %[[LAND_END13]], !annotation [[META2]] // CHECK: [[LAND_END13]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP11]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -399,7 +403,7 @@ int *__counted_by(count) cb_in_from_single(int count, int *__single p) { // CHECK-NEXT: br label %[[LAND_END13]], !annotation [[META2]] // CHECK: [[LAND_END13]]: // CHECK-NEXT: [[TMP14:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP13]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -476,7 +480,7 @@ int *__counted_by(*count) cb_out_from_single(int *count, int *__single p) { // CHECK-NEXT: br label %[[LAND_END13]], !annotation [[META2]] // CHECK: [[LAND_END13]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -565,7 +569,7 @@ int *__counted_by_or_null(count) cbn_in_from_single(int count, int *__single p) // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP5:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP4]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -626,7 +630,7 @@ void *__sized_by(size) sb_in_from_bidi(int size, void *__bidi_indexable p) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP1:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -646,4 +650,5 @@ void *__ended_by(end) eb_from_bidi(void *end, void *__bidi_indexable p) { //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} //. diff --git a/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O2.c b/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O2.c index 710b0fb198c99..b26e65877f07a 100644 --- a/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O2.c +++ b/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-O2.c @@ -28,7 +28,7 @@ // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -53,7 +53,7 @@ int *__counted_by(count) cb_in_from_bidi(int count, int *__bidi_indexable p) { // CHECK-NEXT: [[CMP34:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP37:%.*]] = icmp sgt i32 [[COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP37]], [[CMP34]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -69,7 +69,7 @@ int *__counted_by(count) cb_in_from_indexable(int count, int *__indexable p) { // CHECK-SAME: i32 noundef [[COUNT:%.*]], ptr noundef readnone returned captures(ret: address, provenance) [[P:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = icmp ult i32 [[COUNT]], 2 -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -103,7 +103,7 @@ int *__counted_by(count) cb_in_from_cb(int count, int *__counted_by(count) p) { // CHECK-NEXT: [[CONV:%.*]] = sext i32 [[COUNT]] to i64, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT_NOT:%.*]] = icmp ugt i64 [[CONV]], [[IDX_EXT]] // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP_NOT]], [[SPEC_SELECT_NOT]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF11:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -117,7 +117,7 @@ int *__counted_by(count) cb_in_from_cb2(int count, int *__counted_by(len) p, int // CHECK-LABEL: define dso_local noundef ptr @cb_in_from_cbn( // CHECK-SAME: i32 noundef [[COUNT:%.*]], ptr noundef returned [[P:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META10:![0-9]+]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META12:![0-9]+]] // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[COUNT]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P]], i64 [[IDX_EXT]] // CHECK-NEXT: [[TMP_SROA_9_0:%.*]] = select i1 [[DOTNOT]], ptr null, ptr [[ADD_PTR]] @@ -131,7 +131,7 @@ int *__counted_by(count) cb_in_from_cb2(int count, int *__counted_by(len) p, int // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[IDX_EXT]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -145,7 +145,7 @@ int *__counted_by(count) cb_in_from_cbn(int count, int *__counted_by_or_null(cou // CHECK-LABEL: define dso_local noundef ptr @cb_in_from_cbn2( // CHECK-SAME: i32 noundef [[COUNT:%.*]], ptr noundef returned [[P:%.*]], i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META10]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META12]] // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[LEN]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P]], i64 [[IDX_EXT]] // CHECK-NEXT: [[TMP_SROA_9_0:%.*]] = select i1 [[DOTNOT]], ptr null, ptr [[ADD_PTR]] @@ -160,7 +160,7 @@ int *__counted_by(count) cb_in_from_cbn(int count, int *__counted_by_or_null(cou // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -174,9 +174,9 @@ int *__counted_by(count) cb_in_from_cbn2(int count, int *__counted_by_or_null(le // CHECK-LABEL: define dso_local noundef ptr @cb_out_from_single( // CHECK-SAME: ptr noundef readonly captures(none) [[COUNT:%.*]], ptr noundef readnone returned captures(ret: address, provenance) [[P:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[COUNT]], align 4, !tbaa [[TBAA11:![0-9]+]] +// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[COUNT]], align 4, !tbaa [[TBAA13:![0-9]+]] // CHECK-NEXT: [[OR_COND:%.*]] = icmp ult i32 [[TMP0]], 2, !annotation [[META2]] -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF15:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -193,7 +193,7 @@ int *__counted_by(*count) cb_out_from_single(int *__single count, int *__single // CHECK-NEXT: [[TOBOOL_NOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = icmp ult i32 [[COUNT]], 2 // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[SPEC_SELECT]], [[TOBOOL_NOT]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF16:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -214,7 +214,7 @@ int *__counted_by_or_null(count) cbn_in_from_single(int count, int *__single p) // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[LAND_LHS_TRUE:.*]], !annotation [[META2]] // CHECK: [[LAND_LHS_TRUE]]: // CHECK-NEXT: [[AGG_TEMP_SROA_3_0_P_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 -// CHECK-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_P_SROA_IDX]], align 8, !tbaa [[TBAA13:![0-9]+]] +// CHECK-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_P_SROA_IDX]], align 8, !tbaa [[TBAA17:![0-9]+]] // CHECK-NEXT: [[CMP14_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP4_SROA_1_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP14_NOT]], label %[[TRAP]], label %[[LAND_RHS:.*]], !annotation [[META2]] // CHECK: [[LAND_RHS]]: @@ -225,7 +225,7 @@ int *__counted_by_or_null(count) cbn_in_from_single(int count, int *__single p) // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[SIZE]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -240,7 +240,7 @@ void *__sized_by(size) sb_in_from_bidi(int size, void *__bidi_indexable p) { // CHECK-SAME: i32 noundef [[SIZE:%.*]], ptr noundef readnone returned captures(ret: address, provenance) [[P:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = icmp ult i32 [[SIZE]], 5 -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -264,9 +264,9 @@ void *__sized_by(size) sb_in_from_single(int size, int *__single p) { // CHECK-NEXT: [[CMP4_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[END]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP4_NOT]], label %[[TRAP]], label %[[LAND_RHS:.*]], !annotation [[META2]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_P_SROA_IDX]], align 8, !tbaa [[TBAA13]] +// CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_P_SROA_IDX]], align 8, !tbaa [[TBAA17]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF18:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -284,7 +284,7 @@ void *__ended_by(end) eb_in_from_bidi(void *__single end, void *__bidi_indexable // CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[END]], [[UPPER]], !annotation [[META2]] // CHECK-NEXT: [[CMP1:%.*]] = icmp ule ptr [[P]], [[END]], !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP1]], [[CMP]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -304,8 +304,13 @@ int *__ended_by(end) eb_in_from_single(int *__single end, int *__single p) { // CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} // CHECK: [[META8]] = !{!"bounds-safety-generic", [[META9:![0-9]+]]} // CHECK: [[META9]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[META10]] = !{!"bounds-safety-check-ptr-neq-null"} -// CHECK: [[TBAA11]] = !{[[META12:![0-9]+]], [[META12]], i64 0} -// CHECK: [[META12]] = !{!"int", [[META6]], i64 0} -// CHECK: [[TBAA13]] = !{[[META5]], [[META5]], i64 0} +// CHECK: [[PROF10]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[PROF11]] = !{!"branch_weights", i32 1048577, i32 1048575} +// CHECK: [[META12]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[TBAA13]] = !{[[META14:![0-9]+]], [[META14]], i64 0} +// CHECK: [[META14]] = !{!"int", [[META6]], i64 0} +// CHECK: [[PROF15]] = !{!"branch_weights", i32 1048575, i32 1048577} +// CHECK: [[PROF16]] = !{!"branch_weights", i32 2097151, i32 1} +// CHECK: [[TBAA17]] = !{[[META5]], [[META5]], i64 0} +// CHECK: [[PROF18]] = !{!"branch_weights", i32 1, i32 1048575} //. diff --git a/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-null-O0.c b/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-null-O0.c index eab84e53f9f39..ab5af56b0a57e 100644 --- a/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-null-O0.c +++ b/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-null-O0.c @@ -11,7 +11,7 @@ // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0, !annotation [[META2:![0-9]+]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR2:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -36,7 +36,7 @@ int *__counted_by(len) cb_0(int len) { // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -61,7 +61,7 @@ int *__counted_by(len) cb_NULL(int len) { // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -86,7 +86,7 @@ int *__counted_by(len) cb_int_cast(int len) { // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -111,7 +111,7 @@ int *__counted_by(len) cb_int_cast_NULL(int len) { // CHECK-NEXT: store i32 [[SIZE]], ptr [[SIZE_ADDR]], align 4 // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -136,7 +136,7 @@ int *__sized_by(size) sb_0(int size) { // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -161,7 +161,7 @@ int *__sized_by(len) sb_int_cast(int len) { // CHECK-NEXT: store i32 [[LEN]], ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -294,4 +294,5 @@ int *__sized_by_or_null(len) sbn_int_cast_NULL(int len) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} //. diff --git a/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-null-O2.c b/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-null-O2.c index 6f5fbdf825423..ddde2f5fbe0ff 100644 --- a/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-null-O2.c +++ b/clang/test/BoundsSafety/CodeGen/bounds-attributed-return-null-O2.c @@ -8,7 +8,7 @@ // CHECK-SAME: i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[LEN]], 0, !annotation [[META2:![0-9]+]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -28,7 +28,7 @@ int *__counted_by(len) cb_0(int len) { // CHECK-SAME: i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[LEN]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -48,7 +48,7 @@ int *__counted_by(len) cb_NULL(int len) { // CHECK-SAME: i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[LEN]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -68,7 +68,7 @@ int *__counted_by(len) cb_int_cast(int len) { // CHECK-SAME: i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[LEN]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -88,7 +88,7 @@ int *__counted_by(len) cb_int_cast_NULL(int len) { // CHECK-SAME: i32 noundef [[SIZE:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[SIZE]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -108,7 +108,7 @@ int *__sized_by(size) sb_0(int size) { // CHECK-SAME: i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[LEN]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -128,7 +128,7 @@ int *__sized_by(len) sb_int_cast(int len) { // CHECK-SAME: i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[LEN]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -229,4 +229,5 @@ int *__sized_by_or_null(len) sbn_int_cast_NULL(int len) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O0-disabled-checks.c b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O0-disabled-checks.c index 7a27911149d18..6c8c1c526327c 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O0-disabled-checks.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O0-disabled-checks.c @@ -497,16 +497,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cb* ptr, // CHECK-NEXT: br i1 [[TMP10]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT18:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[TMP11:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5:![0-9]+]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT18]], label %[[TRAP17:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT18]], label %[[TRAP17:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP17]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT18]]: // CHECK-NEXT: call void @consume_cb_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1180,16 +1180,16 @@ void assign_via_ptr_nested_v2_from_cb(struct nested_cb* ptr, // CHECK-NEXT: br i1 [[TMP15]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT18:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[TMP16:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP17:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT18]], label %[[TRAP17:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP17:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT18]], label %[[TRAP17:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP17]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT18]]: // CHECK-NEXT: call void @consume_cb_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1384,5 +1384,6 @@ void call_arg_transparent_union_untransparently_from_cb(int new_count, // CHECK: [[META2]] = !{!"bounds-safety-zero-init"} // CHECK: [[META3]] = !{!"bounds-safety-check-ptr-neq-null"} // CHECK: [[META4]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF5]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O0.c b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O0.c index 4e58ee7fc2da3..d4bec954dba0d 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O0.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O0.c @@ -129,7 +129,7 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -175,9 +175,9 @@ void assign_via_ptr(struct cb* ptr, int new_count, // CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[NEW_PTR_INDIRECT_ADDR]], align 8 // CHECK-NEXT: [[COUNT:%.*]] = getelementptr inbounds nuw [[STRUCT_CB]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META3:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META4:![0-9]+]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_CB]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[NEW_PTR]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] @@ -229,7 +229,7 @@ void assign_via_ptr(struct cb* ptr, int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -325,7 +325,7 @@ void assign_operator(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -418,7 +418,7 @@ void local_var_init(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -513,7 +513,7 @@ void call_arg(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -607,7 +607,7 @@ struct cb return_cb(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -645,7 +645,7 @@ void construct_not_used(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -736,7 +736,7 @@ void assign_via_ptr_nullptr(struct cb* ptr, int new_count) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -840,7 +840,7 @@ void assign_via_ptr_nested(struct nested_cb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -950,7 +950,7 @@ void assign_via_ptr_nested_v2(struct nested_cb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1007,7 +1007,7 @@ void assign_via_ptr_nested_v2(struct nested_cb* ptr, // CHECK-NEXT: br label %[[LAND_END77]], !annotation [[META2]] // CHECK: [[LAND_END77]]: // CHECK-NEXT: [[TMP6:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE43]] ], [ false, %[[CONT]] ], [ [[TMP5]], %[[LAND_END76]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT79:.*]], label %[[TRAP78:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT79:.*]], label %[[TRAP78:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP78]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1120,7 +1120,7 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1139,7 +1139,7 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cb* ptr, // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[BUF]], align 8 // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_CB]], ptr [[ARR]], i64 1 -// CHECK-NEXT: br i1 true, label %[[CONT39:.*]], label %[[TRAP38:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 true, label %[[CONT39:.*]], label %[[TRAP38:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP38]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1175,20 +1175,20 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB53:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR52]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR54:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP42]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB55:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR54]], align 8 -// CHECK-NEXT: [[TMP12:%.*]] = icmp ne ptr [[WIDE_PTR_PTR51]], null, !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT59:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP12:%.*]] = icmp ne ptr [[WIDE_PTR_PTR51]], null, !annotation [[META5:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT59:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP13:%.*]] = icmp ult ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_UB53]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP13:%.*]] = icmp ult ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_UB53]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT57]]: -// CHECK-NEXT: [[TMP14:%.*]] = icmp uge ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_LB55]], !annotation [[META6:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT59]], label %[[TRAP58:.*]], !annotation [[META6]] -// CHECK: [[TRAP58]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT57]]: +// CHECK-NEXT: [[TMP14:%.*]] = icmp uge ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_LB55]], !annotation [[META7:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT59]], label %[[TRAP58:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP58]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT59]]: // CHECK-NEXT: call void @consume_cb_arr(ptr noundef [[WIDE_PTR_PTR51]]) // CHECK-NEXT: ret void @@ -1272,7 +1272,7 @@ void array_of_struct_init(char* __bidi_indexable new_ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1322,7 +1322,7 @@ void assign_via_ptr_other_data_side_effect(struct cb_with_other_data* ptr, // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1418,7 +1418,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct cb_with_other_data* p // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1521,7 +1521,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1645,7 +1645,7 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-NEXT: br label %[[LAND_END31]], !annotation [[META2]] // CHECK: [[LAND_END31]]: // CHECK-NEXT: [[TMP10:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP9]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1753,7 +1753,7 @@ void assign_via_ptr_from_ptr(struct cb* ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP7]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1800,9 +1800,9 @@ void assign_via_ptr_from_cb(struct cb* ptr, int new_count, // CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[COUNT:%.*]] = getelementptr inbounds nuw [[STRUCT_CB]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META3]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META4]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_CB]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 @@ -1864,7 +1864,7 @@ void assign_via_ptr_from_cb(struct cb* ptr, int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1972,7 +1972,7 @@ void assign_operator_from_cb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2077,7 +2077,7 @@ void local_var_init_from_cb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2184,7 +2184,7 @@ void call_arg_from_cb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2290,7 +2290,7 @@ struct cb return_cb_from_cb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2399,7 +2399,7 @@ void construct_not_used_from_cb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP7]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2514,7 +2514,7 @@ void assign_via_ptr_nested_from_cb(struct nested_cb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP7]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2627,7 +2627,7 @@ void assign_via_ptr_nested_v2_from_cb(struct nested_cb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2646,7 +2646,7 @@ void assign_via_ptr_nested_v2_from_cb(struct nested_cb* ptr, // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[BUF]], align 8 // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_CB]], ptr [[ARR]], i64 1 -// CHECK-NEXT: br i1 true, label %[[CONT39:.*]], label %[[TRAP38:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 true, label %[[CONT39:.*]], label %[[TRAP38:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP38]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2682,20 +2682,20 @@ void assign_via_ptr_nested_v2_from_cb(struct nested_cb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB53:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR52]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR54:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP42]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB55:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR54]], align 8 -// CHECK-NEXT: [[TMP17:%.*]] = icmp ne ptr [[WIDE_PTR_PTR51]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT59:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP17:%.*]] = icmp ne ptr [[WIDE_PTR_PTR51]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT59:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP18:%.*]] = icmp ult ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_UB53]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP18]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP18:%.*]] = icmp ult ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_UB53]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP18]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT57]]: -// CHECK-NEXT: [[TMP19:%.*]] = icmp uge ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_LB55]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP19]], label %[[CONT59]], label %[[TRAP58:.*]], !annotation [[META6]] -// CHECK: [[TRAP58]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT57]]: +// CHECK-NEXT: [[TMP19:%.*]] = icmp uge ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_LB55]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP19]], label %[[CONT59]], label %[[TRAP58:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP58]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT59]]: // CHECK-NEXT: call void @consume_cb_arr(ptr noundef [[WIDE_PTR_PTR51]]) // CHECK-NEXT: ret void @@ -2789,7 +2789,7 @@ void array_of_struct_init_from_cb(char* __counted_by(new_count) new_ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP7]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2839,7 +2839,7 @@ void assign_via_ptr_other_data_side_effect_from_cb(struct cb_with_other_data* pt // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2935,7 +2935,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_cb(struct cb_with_other // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3039,7 +3039,7 @@ void call_arg_transparent_union_from_cb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3079,8 +3079,9 @@ void call_arg_transparent_union_untransparently_from_cb(int new_count, } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[META3]] = !{!"bounds-safety-zero-init"} -// CHECK: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-zero-init"} +// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} +// CHECK: [[META7]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O2.c b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O2.c index 7cd66fb02988a..6c5d4b26b52c2 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O2.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by-O2.c @@ -80,12 +80,12 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11:![0-9]+]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -121,7 +121,7 @@ void assign_via_ptr(struct cb* ptr, int new_count, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -158,7 +158,7 @@ void assign_operator(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -193,7 +193,7 @@ void local_var_init(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -232,7 +232,7 @@ void call_arg(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -270,7 +270,7 @@ struct cb return_cb(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -288,7 +288,7 @@ void construct_not_used(int new_count, char* __bidi_indexable new_ptr) { // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[NEW_COUNT]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -324,18 +324,18 @@ void assign_via_ptr_nullptr(struct cb* ptr, int new_count) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -370,18 +370,18 @@ void assign_via_ptr_nested(struct nested_cb* ptr, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -416,20 +416,20 @@ void assign_via_ptr_nested_v2(struct nested_cb* ptr, // CHECK-NEXT: [[CMP25:%.*]] = icmp slt i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp slt i32 [[NEW_COUNT]], 0, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT_NOT98:%.*]] = or i1 [[CMP28]], [[CMP25]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[SPEC_SELECT_NOT98]], label %[[TRAP]], label %[[CONT78:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT_NOT98]], label %[[TRAP]], label %[[CONT78:.*]], !prof [[PROF13:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT78]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_6_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 24 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_6_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: ret void @@ -468,16 +468,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cb* ptr, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META12:![0-9]+]] -// CHECK-NEXT: unreachable, !annotation [[META12]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META14:![0-9]+]] +// CHECK-NEXT: unreachable, !annotation [[META14]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA13:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA15:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA15:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA17:![0-9]+]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_cb_arr(ptr noundef nonnull [[ARR]]) #[[ATTR6]] @@ -515,19 +515,19 @@ void array_of_struct_init(char* __bidi_indexable new_ptr, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR6]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -547,7 +547,7 @@ void assign_via_ptr_other_data_side_effect(struct cb_with_other_data* ptr, // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(none) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[NEW_COUNT]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -555,7 +555,7 @@ void assign_via_ptr_other_data_side_effect(struct cb_with_other_data* ptr, // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR6]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 // CHECK-NEXT: tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[PTR]], i8 0, i64 16, i1 false) -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -593,18 +593,18 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct cb_with_other_data* p // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA16:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA18:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA18:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA20:![0-9]+]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA19:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA21:![0-9]+]] // CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR6]] @@ -643,7 +643,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -657,7 +657,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA20:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA22:![0-9]+]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: ret void @@ -682,7 +682,7 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-LABEL: define dso_local void @assign_via_ptr_from_ptr( // CHECK-SAME: ptr noundef captures(none) [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 8, !tbaa [[TBAA13]] +// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 8, !tbaa [[TBAA15]] // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp slt i32 [[TMP0]], 0, !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] // CHECK: [[TRAP]]: @@ -709,7 +709,7 @@ void assign_via_ptr_from_ptr(struct cb* ptr) { // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -839,13 +839,13 @@ void construct_not_used_from_cb(int new_count, // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -868,13 +868,13 @@ void assign_via_ptr_nested_from_cb(struct nested_cb* ptr, // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -896,14 +896,14 @@ void assign_via_ptr_nested_v2_from_cb(struct nested_cb* ptr, // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp slt i32 [[NEW_COUNT]], 0, !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META12]] -// CHECK-NEXT: unreachable, !annotation [[META12]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META14]] +// CHECK-NEXT: unreachable, !annotation [[META14]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA13]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA15]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[BUF]], align 8, !tbaa [[TBAA15]] +// CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[BUF]], align 8, !tbaa [[TBAA17]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_cb_arr(ptr noundef nonnull [[ARR]]) #[[ATTR6]] @@ -929,13 +929,13 @@ void array_of_struct_init_from_cb(char* __counted_by(new_count) new_ptr, // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR6]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -955,7 +955,7 @@ void assign_via_ptr_other_data_side_effect_from_cb(struct cb_with_other_data* pt // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(none) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[NEW_COUNT]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -963,7 +963,7 @@ void assign_via_ptr_other_data_side_effect_from_cb(struct cb_with_other_data* pt // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR6]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 // CHECK-NEXT: tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[PTR]], i8 0, i64 16, i1 false) -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -1001,18 +1001,18 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_cb(struct cb_with_other // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA16]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA18]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA18]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA20]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA19]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA21]] // CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR6]] @@ -1052,7 +1052,7 @@ void call_arg_transparent_union_from_cb(int new_count, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1066,7 +1066,7 @@ void call_arg_transparent_union_from_cb(int new_count, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA20]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA22]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: ret void @@ -1092,15 +1092,17 @@ void call_arg_transparent_union_untransparently_from_cb(int new_count, // CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} // CHECK: [[META8]] = !{!"bounds-safety-generic", [[META9:![0-9]+]]} // CHECK: [[META9]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[TBAA10]] = !{[[META11:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META11]] = !{!"int", [[META6]], i64 0} -// CHECK: [[META12]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[TBAA13]] = !{[[META14:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META14]] = !{!"cb", [[META11]], i64 0, [[META4]], i64 8} -// CHECK: [[TBAA15]] = !{[[META14]], [[META4]], i64 8} -// CHECK: [[TBAA16]] = !{[[META17:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META17]] = !{!"cb_with_other_data", [[META11]], i64 0, [[META4]], i64 8, [[META11]], i64 16} -// CHECK: [[TBAA18]] = !{[[META17]], [[META4]], i64 8} -// CHECK: [[TBAA19]] = !{[[META17]], [[META11]], i64 16} -// CHECK: [[TBAA20]] = !{[[META6]], [[META6]], i64 0} +// CHECK: [[PROF10]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[TBAA11]] = !{[[META12:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META12]] = !{!"int", [[META6]], i64 0} +// CHECK: [[PROF13]] = !{!"branch_weights", i32 1048577, i32 1048575} +// CHECK: [[META14]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[TBAA15]] = !{[[META16:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META16]] = !{!"cb", [[META12]], i64 0, [[META4]], i64 8} +// CHECK: [[TBAA17]] = !{[[META16]], [[META4]], i64 8} +// CHECK: [[TBAA18]] = !{[[META19:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META19]] = !{!"cb_with_other_data", [[META12]], i64 0, [[META4]], i64 8, [[META12]], i64 16} +// CHECK: [[TBAA20]] = !{[[META19]], [[META4]], i64 8} +// CHECK: [[TBAA21]] = !{[[META19]], [[META12]], i64 16} +// CHECK: [[TBAA22]] = !{[[META6]], [[META6]], i64 0} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O0-disabled-checks.c b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O0-disabled-checks.c index ec75ffa0d30cc..af11a4dbb6786 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O0-disabled-checks.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O0-disabled-checks.c @@ -496,16 +496,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cbon* ptr, // CHECK-NEXT: br i1 [[TMP10]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT18:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[TMP11:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5:![0-9]+]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT18]], label %[[TRAP17:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT18]], label %[[TRAP17:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP17]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT18]]: // CHECK-NEXT: call void @consume_cbon_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1309,16 +1309,16 @@ void assign_via_ptr_nested_v2_from_cbon(struct nested_cbon* ptr, // CHECK-NEXT: br i1 [[TMP19]], label %[[BOUNDSCHECK_NOTNULL17:.*]], label %[[CONT19:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL17]]: // CHECK-NEXT: [[TMP20:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP21:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT19]], label %[[TRAP18:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP21:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT19]], label %[[TRAP18:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP18]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT19]]: // CHECK-NEXT: call void @consume_cbon_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1526,5 +1526,6 @@ void call_arg_transparent_union_untransparently_from_cbon(int new_count, // CHECK: [[META2]] = !{!"bounds-safety-zero-init"} // CHECK: [[META3]] = !{!"bounds-safety-check-ptr-neq-null"} // CHECK: [[META4]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF5]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O0.c b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O0.c index f2fbdbbbbea92..207adfc402084 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O0.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O0.c @@ -142,7 +142,7 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -189,9 +189,9 @@ void assign_via_ptr(struct cbon* ptr, int new_count, // CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[NEW_PTR_INDIRECT_ADDR]], align 8 // CHECK-NEXT: [[COUNT:%.*]] = getelementptr inbounds nuw [[STRUCT_CBON]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META3:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META4:![0-9]+]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_CBON]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[NEW_PTR]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] @@ -256,7 +256,7 @@ void assign_via_ptr(struct cbon* ptr, int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -366,7 +366,7 @@ void assign_operator(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -473,7 +473,7 @@ void local_var_init(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -582,7 +582,7 @@ void call_arg(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -690,7 +690,7 @@ struct cbon return_cbon(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -827,7 +827,7 @@ void assign_via_ptr_nullptr(struct cbon* ptr, int new_count) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -945,7 +945,7 @@ void assign_via_ptr_nested(struct nested_cbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1070,7 +1070,7 @@ void assign_via_ptr_nested_v2(struct nested_cbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1140,7 +1140,7 @@ void assign_via_ptr_nested_v2(struct nested_cbon* ptr, // CHECK-NEXT: br label %[[LAND_END94]], !annotation [[META2]] // CHECK: [[LAND_END94]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE50]] ], [ false, %[[CONT]] ], [ [[TMP7]], %[[LOR_END93]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT96:.*]], label %[[TRAP95:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT96:.*]], label %[[TRAP95:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP95]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1267,7 +1267,7 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1317,20 +1317,20 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cbon* ptr, // CHECK-NEXT: [[WIDE_PTR_UB58:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR57]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR59:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP47]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB60:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR59]], align 8 -// CHECK-NEXT: [[TMP13:%.*]] = icmp ne ptr [[WIDE_PTR_PTR56]], null, !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT64:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP13:%.*]] = icmp ne ptr [[WIDE_PTR_PTR56]], null, !annotation [[META5:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT64:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP14:%.*]] = icmp ult ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_UB58]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP14:%.*]] = icmp ult ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_UB58]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP61]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT62]]: -// CHECK-NEXT: [[TMP15:%.*]] = icmp uge ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_LB60]], !annotation [[META6:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT64]], label %[[TRAP63:.*]], !annotation [[META6]] -// CHECK: [[TRAP63]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT62]]: +// CHECK-NEXT: [[TMP15:%.*]] = icmp uge ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_LB60]], !annotation [[META7:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT64]], label %[[TRAP63:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP63]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT64]]: // CHECK-NEXT: call void @consume_cbon_arr(ptr noundef [[WIDE_PTR_PTR56]]) // CHECK-NEXT: ret void @@ -1428,7 +1428,7 @@ void array_of_struct_init(char* __bidi_indexable new_ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1582,7 +1582,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct cbon_with_other_data* // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1699,7 +1699,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1766,8 +1766,8 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[COUNT1]], align 8 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_CBON]], ptr [[TMP3]], i32 0, i32 1 // CHECK-NEXT: [[TMP5:%.*]] = load ptr, ptr [[BUF]], align 8 -// CHECK-NEXT: [[TMP6:%.*]] = icmp ne ptr [[TMP5]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP6:%.*]] = icmp ne ptr [[TMP5]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP4]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP5]], i64 [[IDX_EXT]] @@ -1850,7 +1850,7 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-NEXT: br label %[[LAND_END38]], !annotation [[META2]] // CHECK: [[LAND_END38]]: // CHECK-NEXT: [[TMP15:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP14]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1901,8 +1901,8 @@ void assign_via_ptr_from_ptr(struct cbon* ptr) { // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP3]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[IDX_EXT]] @@ -1985,7 +1985,7 @@ void assign_via_ptr_from_ptr(struct cbon* ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2033,14 +2033,14 @@ void assign_via_ptr_from_cbon(struct cbon* ptr, int new_count, // CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[COUNT:%.*]] = getelementptr inbounds nuw [[STRUCT_CBON]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META3]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META4]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_CBON]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2123,7 +2123,7 @@ void assign_via_ptr_from_cbon(struct cbon* ptr, int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2174,8 +2174,8 @@ void assign_operator_from_cbon(int new_count, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2258,7 +2258,7 @@ void assign_operator_from_cbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2306,8 +2306,8 @@ void local_var_init_from_cbon(int new_count, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2390,7 +2390,7 @@ void local_var_init_from_cbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2440,8 +2440,8 @@ void call_arg_from_cbon(int new_count, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2524,7 +2524,7 @@ void call_arg_from_cbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2573,8 +2573,8 @@ struct cbon return_cbon_from_cbon(int new_count, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2657,7 +2657,7 @@ struct cbon return_cbon_from_cbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2709,8 +2709,8 @@ void construct_not_used_from_cbon(int new_count, // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP3]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[IDX_EXT]] @@ -2793,7 +2793,7 @@ void construct_not_used_from_cbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2851,8 +2851,8 @@ void assign_via_ptr_nested_from_cbon(struct nested_cbon* ptr, // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP3]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[IDX_EXT]] @@ -2935,7 +2935,7 @@ void assign_via_ptr_nested_from_cbon(struct nested_cbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2991,8 +2991,8 @@ void assign_via_ptr_nested_v2_from_cbon(struct nested_cbon* ptr, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -3075,7 +3075,7 @@ void assign_via_ptr_nested_v2_from_cbon(struct nested_cbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3125,20 +3125,20 @@ void assign_via_ptr_nested_v2_from_cbon(struct nested_cbon* ptr, // CHECK-NEXT: [[WIDE_PTR_UB58:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR57]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR59:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP47]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB60:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR59]], align 8 -// CHECK-NEXT: [[TMP22:%.*]] = icmp ne ptr [[WIDE_PTR_PTR56]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP22]], label %[[BOUNDSCHECK_NOTNULL61:.*]], label %[[CONT65:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP22:%.*]] = icmp ne ptr [[WIDE_PTR_PTR56]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP22]], label %[[BOUNDSCHECK_NOTNULL61:.*]], label %[[CONT65:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL61]]: -// CHECK-NEXT: [[TMP23:%.*]] = icmp ult ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_UB58]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP23]], label %[[CONT63:.*]], label %[[TRAP62:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP23:%.*]] = icmp ult ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_UB58]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP23]], label %[[CONT63:.*]], label %[[TRAP62:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP62]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT63]]: -// CHECK-NEXT: [[TMP24:%.*]] = icmp uge ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_LB60]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP24]], label %[[CONT65]], label %[[TRAP64:.*]], !annotation [[META6]] -// CHECK: [[TRAP64]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT63]]: +// CHECK-NEXT: [[TMP24:%.*]] = icmp uge ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_LB60]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP24]], label %[[CONT65]], label %[[TRAP64:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP64]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT65]]: // CHECK-NEXT: call void @consume_cbon_arr(ptr noundef [[WIDE_PTR_PTR56]]) // CHECK-NEXT: ret void @@ -3175,8 +3175,8 @@ void array_of_struct_init_from_cbon(char* __counted_by_or_null(new_count) new_pt // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP3]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[IDX_EXT]] @@ -3259,7 +3259,7 @@ void array_of_struct_init_from_cbon(char* __counted_by_or_null(new_count) new_pt // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3413,7 +3413,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_cbon(struct cbon_with_o // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3531,7 +3531,7 @@ void call_arg_transparent_union_from_cbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3571,8 +3571,9 @@ void call_arg_transparent_union_untransparently_from_cbon(int new_count, } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[META3]] = !{!"bounds-safety-zero-init"} -// CHECK: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-zero-init"} +// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} +// CHECK: [[META7]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O2.c b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O2.c index 055c3efd0dd96..745307120e457 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O2.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-counted_by_or_null-O2.c @@ -81,12 +81,12 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11:![0-9]+]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -125,7 +125,7 @@ void assign_via_ptr(struct cbon* ptr, int new_count, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -165,7 +165,7 @@ void assign_operator(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -206,7 +206,7 @@ void local_var_init(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -252,7 +252,7 @@ void call_arg(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -294,7 +294,7 @@ struct cbon return_cbon(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -311,7 +311,7 @@ void construct_not_used(int new_count, char* __bidi_indexable new_ptr) { // CHECK-LABEL: define dso_local void @assign_via_ptr_nullptr( // CHECK-SAME: ptr noundef writeonly captures(none) initializes((0, 16)) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]]) local_unnamed_addr #[[ATTR5:[0-9]+]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -349,18 +349,18 @@ void assign_via_ptr_nullptr(struct cbon* ptr, int new_count) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -398,18 +398,18 @@ void assign_via_ptr_nested(struct nested_cbon* ptr, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -443,24 +443,24 @@ void assign_via_ptr_nested_v2(struct nested_cbon* ptr, // CHECK-NEXT: [[CONV:%.*]] = sext i32 [[NEW_COUNT]] to i64, !annotation [[META2]] // CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[AGG_TEMP1_SROA_1_0_COPYLOAD]] to i64 // CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]] to i64 -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META12:![0-9]+]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META13:![0-9]+]] // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT95]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT95]], label %[[TRAP]], !prof [[PROF14:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT95]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_6_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 24 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_6_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: ret void @@ -502,16 +502,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_cbon* ptr, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META13:![0-9]+]] -// CHECK-NEXT: unreachable, !annotation [[META13]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META15:![0-9]+]] +// CHECK-NEXT: unreachable, !annotation [[META15]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA14:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA16:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA16:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA18:![0-9]+]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_cbon_arr(ptr noundef nonnull [[ARR]]) #[[ATTR7]] @@ -552,19 +552,19 @@ void array_of_struct_init(char* __bidi_indexable new_ptr, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR7]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -584,13 +584,13 @@ void assign_via_ptr_other_data_side_effect(struct cbon_with_other_data* ptr, // CHECK-SAME: ptr noundef writeonly captures(none) initializes((0, 24)) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(none) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR7]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr null, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -631,18 +631,18 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct cbon_with_other_data* // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA17:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA19:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA19:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA21:![0-9]+]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA20:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA22:![0-9]+]] // CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR7]] @@ -684,7 +684,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -698,7 +698,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA21:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA23:![0-9]+]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR7]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR7]] // CHECK-NEXT: ret void @@ -723,10 +723,10 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-LABEL: define dso_local void @assign_via_ptr_from_ptr( // CHECK-SAME: ptr noundef captures(none) [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 8, !tbaa [[TBAA14]] +// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 8, !tbaa [[TBAA16]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 -// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[TBAA16]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META22:![0-9]+]] +// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[TBAA18]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META24:![0-9]+]] // CHECK-NEXT: [[CMP_NOT50:%.*]] = icmp slt i32 [[TMP0]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = select i1 [[DOTNOT]], i1 [[CMP_NOT50]], i1 false, !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -748,7 +748,7 @@ void assign_via_ptr_from_ptr(struct cbon* ptr) { // CHECK-LABEL: define dso_local void @assign_via_ptr_from_cbon( // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -756,7 +756,7 @@ void assign_via_ptr_from_ptr(struct cbon* ptr) { // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -774,7 +774,7 @@ void assign_via_ptr_from_cbon(struct cbon* ptr, int new_count, // CHECK-LABEL: define dso_local void @assign_operator_from_cbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(address_is_null) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT48:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT48]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -797,7 +797,7 @@ void assign_operator_from_cbon(int new_count, // CHECK-LABEL: define dso_local void @local_var_init_from_cbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(address_is_null) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -818,7 +818,7 @@ void local_var_init_from_cbon(int new_count, // CHECK-LABEL: define dso_local void @call_arg_from_cbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -844,7 +844,7 @@ void call_arg_from_cbon(int new_count, // CHECK-LABEL: define dso_local [2 x i64] @return_cbon_from_cbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -869,7 +869,7 @@ struct cbon return_cbon_from_cbon(int new_count, // CHECK-LABEL: define dso_local void @construct_not_used_from_cbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(address_is_null) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -890,7 +890,7 @@ void construct_not_used_from_cbon(int new_count, // CHECK-LABEL: define dso_local void @assign_via_ptr_nested_from_cbon( // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], ptr noundef [[NEW_PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[DOTNOT]], [[CMP_NOT46]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -898,13 +898,13 @@ void construct_not_used_from_cbon(int new_count, // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -921,7 +921,7 @@ void assign_via_ptr_nested_from_cbon(struct nested_cbon* ptr, // CHECK-LABEL: define dso_local void @assign_via_ptr_nested_v2_from_cbon( // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], ptr noundef [[NEW_PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[DOTNOT]], [[CMP_NOT46]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -929,13 +929,13 @@ void assign_via_ptr_nested_from_cbon(struct nested_cbon* ptr, // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -954,19 +954,19 @@ void assign_via_ptr_nested_v2_from_cbon(struct nested_cbon* ptr, // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[ARR:%.*]] = alloca [2 x %struct.cbon], align 8 // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[ARR]]) #[[ATTR7]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT65:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[DOTNOT]], [[CMP_NOT65]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META13]] -// CHECK-NEXT: unreachable, !annotation [[META13]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META15]] +// CHECK-NEXT: unreachable, !annotation [[META15]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA14]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA16]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[BUF]], align 8, !tbaa [[TBAA16]] +// CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[BUF]], align 8, !tbaa [[TBAA18]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_cbon_arr(ptr noundef nonnull [[ARR]]) #[[ATTR7]] @@ -985,7 +985,7 @@ void array_of_struct_init_from_cbon(char* __counted_by_or_null(new_count) new_pt // CHECK-LABEL: define dso_local void @assign_via_ptr_other_data_side_effect_from_cbon( // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -994,13 +994,13 @@ void array_of_struct_init_from_cbon(char* __counted_by_or_null(new_count) new_pt // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR7]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -1020,13 +1020,13 @@ void assign_via_ptr_other_data_side_effect_from_cbon(struct cbon_with_other_data // CHECK-SAME: ptr noundef writeonly captures(none) initializes((0, 24)) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(none) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR7]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr null, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -1067,18 +1067,18 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_cbon(struct cbon_with_o // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA17]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA19]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA19]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA21]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA20]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA22]] // CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR7]] @@ -1121,7 +1121,7 @@ void call_arg_transparent_union_from_cbon(int new_count, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1135,7 +1135,7 @@ void call_arg_transparent_union_from_cbon(int new_count, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA21]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA23]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR7]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR7]] // CHECK-NEXT: ret void @@ -1161,17 +1161,19 @@ void call_arg_transparent_union_untransparently_from_cbon(int new_count, // CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} // CHECK: [[META8]] = !{!"bounds-safety-generic", [[META9:![0-9]+]]} // CHECK: [[META9]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[TBAA10]] = !{[[META11:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META11]] = !{!"int", [[META6]], i64 0} -// CHECK: [[META12]] = !{[[META9]]} -// CHECK: [[META13]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[TBAA14]] = !{[[META15:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META15]] = !{!"cbon", [[META11]], i64 0, [[META4]], i64 8} -// CHECK: [[TBAA16]] = !{[[META15]], [[META4]], i64 8} -// CHECK: [[TBAA17]] = !{[[META18:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META18]] = !{!"cbon_with_other_data", [[META11]], i64 0, [[META4]], i64 8, [[META11]], i64 16} -// CHECK: [[TBAA19]] = !{[[META18]], [[META4]], i64 8} -// CHECK: [[TBAA20]] = !{[[META18]], [[META11]], i64 16} -// CHECK: [[TBAA21]] = !{[[META6]], [[META6]], i64 0} -// CHECK: [[META22]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[PROF10]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[TBAA11]] = !{[[META12:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META12]] = !{!"int", [[META6]], i64 0} +// CHECK: [[META13]] = !{[[META9]]} +// CHECK: [[PROF14]] = !{!"branch_weights", i32 -8192, i32 8191} +// CHECK: [[META15]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[TBAA16]] = !{[[META17:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META17]] = !{!"cbon", [[META12]], i64 0, [[META4]], i64 8} +// CHECK: [[TBAA18]] = !{[[META17]], [[META4]], i64 8} +// CHECK: [[TBAA19]] = !{[[META20:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META20]] = !{!"cbon_with_other_data", [[META12]], i64 0, [[META4]], i64 8, [[META12]], i64 16} +// CHECK: [[TBAA21]] = !{[[META20]], [[META4]], i64 8} +// CHECK: [[TBAA22]] = !{[[META20]], [[META12]], i64 16} +// CHECK: [[TBAA23]] = !{[[META6]], [[META6]], i64 0} +// CHECK: [[META24]] = !{!"bounds-safety-check-ptr-neq-null"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O0-disabled-checks.c b/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O0-disabled-checks.c index f3907a0b30f35..f31acea8233e1 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O0-disabled-checks.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O0-disabled-checks.c @@ -474,16 +474,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_eb* ptr, // CHECK-NEXT: br i1 [[TMP8]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT18:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[TMP9:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5:![0-9]+]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP10:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT18]], label %[[TRAP17:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP10:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT18]], label %[[TRAP17:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP17]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT18]]: // CHECK-NEXT: call void @consume_eb_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1226,16 +1226,16 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: br i1 [[TMP19]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT25:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[TMP20:%.*]] = icmp ult ptr [[WIDE_PTR_PTR19]], [[WIDE_PTR_UB21]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP21:%.*]] = icmp uge ptr [[WIDE_PTR_PTR19]], [[WIDE_PTR_LB23]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT25]], label %[[TRAP24:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP21:%.*]] = icmp uge ptr [[WIDE_PTR_PTR19]], [[WIDE_PTR_LB23]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT25]], label %[[TRAP24:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP24]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT25]]: // CHECK-NEXT: call void @consume_eb_arr(ptr noundef [[WIDE_PTR_PTR19]]) // CHECK-NEXT: ret void @@ -1479,5 +1479,6 @@ void call_arg_transparent_union_untransparently_from_eb( // CHECK: [[META2]] = !{!"bounds-safety-zero-init"} // CHECK: [[META3]] = !{!"bounds-safety-check-ptr-neq-null"} // CHECK: [[META4]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF5]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O0.c b/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O0.c index 706cd0a94c431..8c7588eec20ef 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O0.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O0.c @@ -1,5 +1,5 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --prefix-filecheck-ir-name UNNAMED_TMP_ --version 5 // REQUIRES: system-darwin -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --prefix-filecheck-ir-name _NAMED_ --version 5 // Note: Specifying the triple seems to be necessary for `update_cc_test_checks.py` to work // RUN: %clang_cc1 -O0 -triple arm64-apple-iphoneos -emit-llvm -fbounds-safety -fbounds-safety-bringup-missing-checks=compound_literal_init -Wno-bounds-attributes-init-list-side-effect -Wno-bounds-safety-init-list-partial-null -o - %s | FileCheck %s @@ -106,7 +106,7 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -148,9 +148,9 @@ void assign_via_ptr(struct eb* ptr, // CHECK-NEXT: store ptr [[NEW_START]], ptr [[NEW_START_INDIRECT_ADDR]], align 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[START:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store ptr null, ptr [[START]], align 8, !annotation [[META3:![0-9]+]] +// CHECK-NEXT: store ptr null, ptr [[START]], align 8, !annotation [[META4:![0-9]+]] // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[END]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[END]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[NEW_START]], i64 24, i1 false), !annotation [[META2]] @@ -183,7 +183,7 @@ void assign_via_ptr(struct eb* ptr, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -256,7 +256,7 @@ void assign_operator(char* __bidi_indexable new_start, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -326,7 +326,7 @@ void local_var_init(char* __bidi_indexable new_start, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -398,7 +398,7 @@ void call_arg(char* __bidi_indexable new_start, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -469,7 +469,7 @@ struct eb return_eb(char* __bidi_indexable new_start, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -521,7 +521,7 @@ void construct_not_used(char* __bidi_indexable new_start, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP6:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP1]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -590,7 +590,7 @@ void assign_via_ptr_nullptr(struct eb* ptr, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -671,7 +671,7 @@ void assign_via_ptr_nested(struct nested_eb* ptr, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -756,7 +756,7 @@ void assign_via_ptr_nested_v2(struct nested_eb* ptr, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -794,7 +794,7 @@ void assign_via_ptr_nested_v2(struct nested_eb* ptr, // CHECK-NEXT: br label %[[LAND_END41]], !annotation [[META2]] // CHECK: [[LAND_END41]]: // CHECK-NEXT: [[TMP6:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE20]] ], [ false, %[[CONT]] ], [ [[CMP40]], %[[LAND_RHS29]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT43:.*]], label %[[TRAP42:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT43:.*]], label %[[TRAP42:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP42]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -886,7 +886,7 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_eb* ptr, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -903,7 +903,7 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_eb* ptr, // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[ARR]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP0]], ptr [[END]], align 8 // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_EB]], ptr [[ARR]], i64 1 -// CHECK-NEXT: br i1 true, label %[[CONT24:.*]], label %[[TRAP23:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 true, label %[[CONT24:.*]], label %[[TRAP23:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP23]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -937,20 +937,20 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_eb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB38:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR37]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP27]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB40:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR39]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = icmp ne ptr [[WIDE_PTR_PTR36]], null, !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT44:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP10:%.*]] = icmp ne ptr [[WIDE_PTR_PTR36]], null, !annotation [[META5:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT44:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP11:%.*]] = icmp ult ptr [[WIDE_PTR_PTR36]], [[WIDE_PTR_UB38]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT42:.*]], label %[[TRAP41:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP11:%.*]] = icmp ult ptr [[WIDE_PTR_PTR36]], [[WIDE_PTR_UB38]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT42:.*]], label %[[TRAP41:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP41]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT42]]: -// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR36]], [[WIDE_PTR_LB40]], !annotation [[META6:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT44]], label %[[TRAP43:.*]], !annotation [[META6]] -// CHECK: [[TRAP43]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT42]]: +// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR36]], [[WIDE_PTR_LB40]], !annotation [[META7:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT44]], label %[[TRAP43:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP43]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT44]]: // CHECK-NEXT: call void @consume_eb_arr(ptr noundef [[WIDE_PTR_PTR36]]) // CHECK-NEXT: ret void @@ -1012,7 +1012,7 @@ void array_of_struct_init(char* __bidi_indexable new_start, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1074,7 +1074,7 @@ void assign_via_ptr_other_data_side_effect(struct eb_with_other_data* ptr, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP6:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP1]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1146,7 +1146,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct eb_with_other_data* p // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1226,7 +1226,7 @@ void call_arg_transparent_union(char* __bidi_indexable new_start, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP15]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1276,7 +1276,7 @@ void call_arg_transparent_union_untransparently( // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL:%.*]] = alloca [[STRUCT_EB:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -1301,13 +1301,13 @@ void call_arg_transparent_union_untransparently( // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP9:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP9]], ptr [[TMP11]], align 8 -// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -1327,7 +1327,7 @@ void call_arg_transparent_union_untransparently( // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -1351,7 +1351,7 @@ void call_arg_transparent_union_untransparently( // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1366,7 +1366,7 @@ void call_arg_transparent_union_untransparently( // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[DOTCOMPOUNDLITERAL]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -1393,7 +1393,7 @@ void assign_via_ptr_from_eb(struct eb* ptr, // CHECK-NEXT: [[NEW:%.*]] = alloca [[STRUCT_EB:%.*]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL:%.*]] = alloca [[STRUCT_EB]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -1405,9 +1405,9 @@ void assign_via_ptr_from_eb(struct eb* ptr, // CHECK-NEXT: store ptr [[NEW_START]], ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[START:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store ptr null, ptr [[START]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[START]], align 8, !annotation [[META4]] // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[END]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[END]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 @@ -1420,13 +1420,13 @@ void assign_via_ptr_from_eb(struct eb* ptr, // CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP9]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -1446,7 +1446,7 @@ void assign_via_ptr_from_eb(struct eb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -1470,7 +1470,7 @@ void assign_via_ptr_from_eb(struct eb* ptr, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1485,7 +1485,7 @@ void assign_via_ptr_from_eb(struct eb* ptr, // CHECK-NEXT: [[WIDE_PTR_LB38:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR37]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR34]], ptr [[START31]], align 8 // CHECK-NEXT: [[END39:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[DOTCOMPOUNDLITERAL]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP40]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP40]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP40]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR42:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR41]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR43:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP40]], i32 0, i32 1 @@ -1512,7 +1512,7 @@ void assign_operator_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[NEW:%.*]] = alloca [[STRUCT_EB:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -1535,13 +1535,13 @@ void assign_operator_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP9]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -1561,7 +1561,7 @@ void assign_operator_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -1585,7 +1585,7 @@ void assign_operator_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1600,7 +1600,7 @@ void assign_operator_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -1624,7 +1624,7 @@ void local_var_init_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL:%.*]] = alloca [[STRUCT_EB:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -1647,13 +1647,13 @@ void local_var_init_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP9]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -1673,7 +1673,7 @@ void local_var_init_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -1697,7 +1697,7 @@ void local_var_init_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1712,7 +1712,7 @@ void local_var_init_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[DOTCOMPOUNDLITERAL]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -1738,7 +1738,7 @@ void call_arg_from_eb(char* __ended_by(new_end) new_start, char* new_end) { // CHECK-NEXT: [[NEW_START_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -1761,13 +1761,13 @@ void call_arg_from_eb(char* __ended_by(new_end) new_start, char* new_end) { // CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP9]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -1787,7 +1787,7 @@ void call_arg_from_eb(char* __ended_by(new_end) new_start, char* new_end) { // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -1811,7 +1811,7 @@ void call_arg_from_eb(char* __ended_by(new_end) new_start, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1826,7 +1826,7 @@ void call_arg_from_eb(char* __ended_by(new_end) new_start, char* new_end) { // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[RETVAL]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -1851,7 +1851,7 @@ struct eb return_eb_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[AGG_TMP_ENSURED:%.*]] = alloca [[STRUCT_EB:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -1874,13 +1874,13 @@ struct eb return_eb_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP9]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -1900,7 +1900,7 @@ struct eb return_eb_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -1924,7 +1924,7 @@ struct eb return_eb_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1939,7 +1939,7 @@ struct eb return_eb_from_eb(char* __ended_by(new_end) new_start, char* new_end) // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[AGG_TMP_ENSURED]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -1983,7 +1983,7 @@ void construct_not_used_from_eb(char* __ended_by(new_end) new_start, char* new_e // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP6:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP1]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2011,7 +2011,7 @@ void assign_via_ptr_nullptr_from_eb(struct eb* ptr, char* new_end) { // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL:%.*]] = alloca [[STRUCT_NESTED_EB:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -2037,13 +2037,13 @@ void assign_via_ptr_nullptr_from_eb(struct eb* ptr, char* new_end) { // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP9:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP9]], ptr [[TMP11]], align 8 -// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -2063,7 +2063,7 @@ void assign_via_ptr_nullptr_from_eb(struct eb* ptr, char* new_end) { // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -2087,7 +2087,7 @@ void assign_via_ptr_nullptr_from_eb(struct eb* ptr, char* new_end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2102,7 +2102,7 @@ void assign_via_ptr_nullptr_from_eb(struct eb* ptr, char* new_end) { // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[NESTED]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -2134,7 +2134,7 @@ void assign_via_ptr_nested_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL:%.*]] = alloca [[STRUCT_NESTED_EB:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -2160,13 +2160,13 @@ void assign_via_ptr_nested_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP9:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP9]], ptr [[TMP11]], align 8 -// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -2186,7 +2186,7 @@ void assign_via_ptr_nested_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -2210,7 +2210,7 @@ void assign_via_ptr_nested_from_eb(struct nested_eb* ptr, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2225,7 +2225,7 @@ void assign_via_ptr_nested_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[NESTED]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -2256,7 +2256,7 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[ARR:%.*]] = alloca [2 x %struct.eb], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -2281,13 +2281,13 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP9]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -2307,7 +2307,7 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -2331,7 +2331,7 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2346,7 +2346,7 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB]], ptr [[ARR]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -2355,7 +2355,7 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[WIDE_PTR_LB44:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR43]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR40]], ptr [[END]], align 8 // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_EB]], ptr [[ARR]], i64 1 -// CHECK-NEXT: br i1 true, label %[[CONT46:.*]], label %[[TRAP45:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 true, label %[[CONT46:.*]], label %[[TRAP45:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP45]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2389,20 +2389,20 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB60:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR59]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR61:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP49]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB62:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR61]], align 8 -// CHECK-NEXT: [[TMP20:%.*]] = icmp ne ptr [[WIDE_PTR_PTR58]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP20]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT66:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP20:%.*]] = icmp ne ptr [[WIDE_PTR_PTR58]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP20]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT66:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP21:%.*]] = icmp ult ptr [[WIDE_PTR_PTR58]], [[WIDE_PTR_UB60]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT64:.*]], label %[[TRAP63:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP21:%.*]] = icmp ult ptr [[WIDE_PTR_PTR58]], [[WIDE_PTR_UB60]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT64:.*]], label %[[TRAP63:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP63]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT64]]: -// CHECK-NEXT: [[TMP22:%.*]] = icmp uge ptr [[WIDE_PTR_PTR58]], [[WIDE_PTR_LB62]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP22]], label %[[CONT66]], label %[[TRAP65:.*]], !annotation [[META6]] -// CHECK: [[TRAP65]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT64]]: +// CHECK-NEXT: [[TMP22:%.*]] = icmp uge ptr [[WIDE_PTR_PTR58]], [[WIDE_PTR_LB62]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP22]], label %[[CONT66]], label %[[TRAP65:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP65]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT66]]: // CHECK-NEXT: call void @consume_eb_arr(ptr noundef [[WIDE_PTR_PTR58]]) // CHECK-NEXT: ret void @@ -2424,7 +2424,7 @@ void array_of_struct_init_from_eb(char* __ended_by(new_end) new_start, char* new // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL:%.*]] = alloca [[STRUCT_EB_WITH_OTHER_DATA:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -2449,13 +2449,13 @@ void array_of_struct_init_from_eb(char* __ended_by(new_end) new_start, char* new // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP9:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP9]], ptr [[TMP11]], align 8 -// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP12]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -2475,7 +2475,7 @@ void array_of_struct_init_from_eb(char* __ended_by(new_end) new_start, char* new // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -2499,7 +2499,7 @@ void array_of_struct_init_from_eb(char* __ended_by(new_end) new_start, char* new // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2514,7 +2514,7 @@ void array_of_struct_init_from_eb(char* __ended_by(new_end) new_start, char* new // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB_WITH_OTHER_DATA]], ptr [[DOTCOMPOUNDLITERAL]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -2568,7 +2568,7 @@ void assign_via_ptr_other_data_side_effect_from_eb(struct eb_with_other_data* pt // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP6:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP1]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2602,7 +2602,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_eb(struct eb_with_other // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[AGG_TMP:%.*]] = alloca [[UNION_TRANSPARENTUNION:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -2625,13 +2625,13 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_eb(struct eb_with_other // CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP9]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -2651,7 +2651,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_eb(struct eb_with_other // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -2675,7 +2675,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_eb(struct eb_with_other // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2690,7 +2690,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_eb(struct eb_with_other // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB_WITH_OTHER_DATA]], ptr [[AGG_TMP]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -2723,7 +2723,7 @@ void call_arg_transparent_union_from_eb(char* __ended_by(new_end) new_start, // CHECK-NEXT: [[NEW_END_ADDR:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL:%.*]] = alloca [[UNION_TRANSPARENTUNION:%.*]], align 8 // CHECK-NEXT: [[TMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 -// CHECK-NEXT: [[_NAMED_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 +// CHECK-NEXT: [[UNNAMED_TMP_TMP1:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP2:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 // CHECK-NEXT: [[AGG_TEMP5:%.*]] = alloca %"__bounds_safety::wide_ptr.bidi_indexable", align 8 @@ -2747,13 +2747,13 @@ void call_arg_transparent_union_from_eb(char* __ended_by(new_end) new_start, // CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[NEW_START_ADDR]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[NEW_END_ADDR]], align 8 -// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 0 +// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 0 // CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP9]], align 8 -// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 1 +// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 1 // CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP10]], align 8 -// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[_NAMED_TMP1]], i32 0, i32 2 +// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[UNNAMED_TMP_TMP1]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 1, !annotation [[META2]] @@ -2773,7 +2773,7 @@ void call_arg_transparent_union_from_eb(char* __ended_by(new_end) new_start, // CHECK-NEXT: [[WIDE_PTR_UB9:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR8]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false), !annotation [[META2]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP12]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 0, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR14:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR13]], align 8, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_UB_ADDR15:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP12]], i32 0, i32 1, !annotation [[META2]] @@ -2797,7 +2797,7 @@ void call_arg_transparent_union_from_eb(char* __ended_by(new_end) new_start, // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2812,7 +2812,7 @@ void call_arg_transparent_union_from_eb(char* __ended_by(new_end) new_start, // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[START]], align 8 // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw [[STRUCT_EB_WITH_OTHER_DATA]], ptr [[DOTCOMPOUNDLITERAL]], i32 0, i32 1 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[_NAMED_TMP1]], i64 24, i1 false) +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP38]], ptr align 8 [[UNNAMED_TMP_TMP1]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR39:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 0 // CHECK-NEXT: [[WIDE_PTR_PTR40:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR39]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP38]], i32 0, i32 1 @@ -2843,8 +2843,9 @@ void call_arg_transparent_union_untransparently_from_eb( } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[META3]] = !{!"bounds-safety-zero-init"} -// CHECK: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-zero-init"} +// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} +// CHECK: [[META7]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O2.c b/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O2.c index 52d12174ff33f..888b1baf2168c 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O2.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-ended_by-O2.c @@ -72,7 +72,7 @@ void receive_transparent_union(union TransparentUnion); // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3:![0-9]+]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -105,7 +105,7 @@ void assign_via_ptr(struct eb* ptr, // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -136,7 +136,7 @@ void assign_operator(char* __bidi_indexable new_start, char* new_end) { // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -165,7 +165,7 @@ void local_var_init(char* __bidi_indexable new_start, char* new_end) { // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -199,7 +199,7 @@ void call_arg(char* __bidi_indexable new_start, char* new_end) { // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -232,7 +232,7 @@ struct eb return_eb(char* __bidi_indexable new_start, char* new_end) { // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -250,7 +250,7 @@ void construct_not_used(char* __bidi_indexable new_start, char* new_end) { // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], ptr noundef [[NEW_END:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ugt ptr [[NEW_END]], inttoptr (i64 1 to ptr), !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -283,7 +283,7 @@ void assign_via_ptr_nullptr(struct eb* ptr, char* new_end) { // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -292,7 +292,7 @@ void assign_via_ptr_nullptr(struct eb* ptr, char* new_end) { // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9:![0-9]+]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -321,7 +321,7 @@ void assign_via_ptr_nested(struct nested_eb* ptr, // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -330,7 +330,7 @@ void assign_via_ptr_nested(struct nested_eb* ptr, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -359,7 +359,7 @@ void assign_via_ptr_nested_v2(struct nested_eb* ptr, // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT42:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT42:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -368,7 +368,7 @@ void assign_via_ptr_nested_v2(struct nested_eb* ptr, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 24 @@ -405,14 +405,14 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_eb* ptr, // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META10:![0-9]+]] -// CHECK-NEXT: unreachable, !annotation [[META10]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META11:![0-9]+]] +// CHECK-NEXT: unreachable, !annotation [[META11]] // CHECK: [[CONT]]: -// CHECK-NEXT: store ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], ptr [[ARR]], align 8, !tbaa [[TBAA11:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], ptr [[ARR]], align 8, !tbaa [[TBAA12:![0-9]+]] // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[NEW_END]], ptr [[END]], align 8, !tbaa [[TBAA13:![0-9]+]] +// CHECK-NEXT: store ptr [[NEW_END]], ptr [[END]], align 8, !tbaa [[TBAA14:![0-9]+]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_eb_arr(ptr noundef nonnull [[ARR]]) #[[ATTR6]] @@ -443,7 +443,7 @@ void array_of_struct_init(char* __bidi_indexable new_start, char* new_end) { // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -453,7 +453,7 @@ void array_of_struct_init(char* __bidi_indexable new_start, char* new_end) { // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -473,7 +473,7 @@ void assign_via_ptr_other_data_side_effect(struct eb_with_other_data* ptr, // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], ptr noundef [[NEW_END:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ugt ptr [[NEW_END]], inttoptr (i64 1 to ptr), !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -483,7 +483,7 @@ void assign_via_ptr_other_data_side_effect(struct eb_with_other_data* ptr, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -514,16 +514,16 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct eb_with_other_data* p // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA14:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA15:![0-9]+]] // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[NEW_END]], ptr [[END]], align 8, !tbaa [[TBAA16:![0-9]+]] +// CHECK-NEXT: store ptr [[NEW_END]], ptr [[END]], align 8, !tbaa [[TBAA17:![0-9]+]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA17:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA18:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR6]] @@ -556,7 +556,7 @@ void call_arg_transparent_union(char* __bidi_indexable new_start, // CHECK: [[LAND_RHS]]: // CHECK-NEXT: [[AGG_TEMP5_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_NEW_START_SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[CMP15_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP5_SROA_1_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP15_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -568,7 +568,7 @@ void call_arg_transparent_union(char* __bidi_indexable new_start, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA18:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA19:![0-9]+]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: ret void @@ -718,7 +718,7 @@ void construct_not_used_from_eb(char* __ended_by(new_end) new_start, char* new_e // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], ptr noundef [[NEW_END:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ugt ptr [[NEW_END]], inttoptr (i64 1 to ptr), !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -749,7 +749,7 @@ void assign_via_ptr_nullptr_from_eb(struct eb* ptr, char* new_end) { // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -776,7 +776,7 @@ void assign_via_ptr_nested_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -798,12 +798,12 @@ void assign_via_ptr_nested_v2_from_eb(struct nested_eb* ptr, // CHECK-NEXT: [[CMP19_NOT:%.*]] = icmp ugt ptr [[NEW_START]], [[NEW_END]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP19_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META10]] -// CHECK-NEXT: unreachable, !annotation [[META10]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META11]] +// CHECK-NEXT: unreachable, !annotation [[META11]] // CHECK: [[CONT]]: -// CHECK-NEXT: store ptr [[NEW_START]], ptr [[ARR]], align 8, !tbaa [[TBAA11]] +// CHECK-NEXT: store ptr [[NEW_START]], ptr [[ARR]], align 8, !tbaa [[TBAA12]] // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[NEW_END]], ptr [[END]], align 8, !tbaa [[TBAA13]] +// CHECK-NEXT: store ptr [[NEW_END]], ptr [[END]], align 8, !tbaa [[TBAA14]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_eb_arr(ptr noundef nonnull [[ARR]]) #[[ATTR6]] @@ -833,7 +833,7 @@ void array_of_struct_init_from_eb(char* __ended_by(new_end) new_start, char* new // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -853,7 +853,7 @@ void assign_via_ptr_other_data_side_effect_from_eb(struct eb_with_other_data* pt // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], ptr noundef [[NEW_END:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ugt ptr [[NEW_END]], inttoptr (i64 1 to ptr), !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF8]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -863,7 +863,7 @@ void assign_via_ptr_other_data_side_effect_from_eb(struct eb_with_other_data* pt // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_END]], ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA8]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA9]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -888,11 +888,11 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_eb(struct eb_with_other // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store ptr [[NEW_START]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA14]] +// CHECK-NEXT: store ptr [[NEW_START]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA15]] // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[NEW_END]], ptr [[END]], align 8, !tbaa [[TBAA16]] +// CHECK-NEXT: store ptr [[NEW_END]], ptr [[END]], align 8, !tbaa [[TBAA17]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA17]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA18]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR6]] @@ -926,7 +926,7 @@ void call_arg_transparent_union_from_eb(char* __ended_by(new_end) new_start, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA18]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA19]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: ret void @@ -951,15 +951,16 @@ void call_arg_transparent_union_untransparently_from_eb( // CHECK: [[META5]] = !{!"any pointer", [[META6:![0-9]+]], i64 0} // CHECK: [[META6]] = !{!"omnipotent char", [[META7:![0-9]+]], i64 0} // CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} -// CHECK: [[TBAA8]] = !{[[META9:![0-9]+]], [[META9]], i64 0} -// CHECK: [[META9]] = !{!"int", [[META6]], i64 0} -// CHECK: [[META10]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[TBAA11]] = !{[[META12:![0-9]+]], [[META4]], i64 0} -// CHECK: [[META12]] = !{!"eb", [[META4]], i64 0, [[META4]], i64 8} -// CHECK: [[TBAA13]] = !{[[META12]], [[META4]], i64 8} -// CHECK: [[TBAA14]] = !{[[META15:![0-9]+]], [[META4]], i64 0} -// CHECK: [[META15]] = !{!"eb_with_other_data", [[META4]], i64 0, [[META4]], i64 8, [[META9]], i64 16} -// CHECK: [[TBAA16]] = !{[[META15]], [[META4]], i64 8} -// CHECK: [[TBAA17]] = !{[[META15]], [[META9]], i64 16} -// CHECK: [[TBAA18]] = !{[[META6]], [[META6]], i64 0} +// CHECK: [[PROF8]] = !{!"branch_weights", i32 1, i32 1048575} +// CHECK: [[TBAA9]] = !{[[META10:![0-9]+]], [[META10]], i64 0} +// CHECK: [[META10]] = !{!"int", [[META6]], i64 0} +// CHECK: [[META11]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[TBAA12]] = !{[[META13:![0-9]+]], [[META4]], i64 0} +// CHECK: [[META13]] = !{!"eb", [[META4]], i64 0, [[META4]], i64 8} +// CHECK: [[TBAA14]] = !{[[META13]], [[META4]], i64 8} +// CHECK: [[TBAA15]] = !{[[META16:![0-9]+]], [[META4]], i64 0} +// CHECK: [[META16]] = !{!"eb_with_other_data", [[META4]], i64 0, [[META4]], i64 8, [[META10]], i64 16} +// CHECK: [[TBAA17]] = !{[[META16]], [[META4]], i64 8} +// CHECK: [[TBAA18]] = !{[[META16]], [[META10]], i64 16} +// CHECK: [[TBAA19]] = !{[[META6]], [[META6]], i64 0} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O0-disabled-checks.c b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O0-disabled-checks.c index 5aed46db8b291..cb39c257ea953 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O0-disabled-checks.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O0-disabled-checks.c @@ -498,16 +498,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sb* ptr, // CHECK-NEXT: br i1 [[TMP10]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT18:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[TMP11:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5:![0-9]+]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT18]], label %[[TRAP17:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT18]], label %[[TRAP17:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP17]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT18]]: // CHECK-NEXT: call void @consume_sb_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1182,16 +1182,16 @@ void assign_via_ptr_nested_v2_from_sb(struct nested_sb* ptr, // CHECK-NEXT: br i1 [[TMP15]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT18:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[TMP16:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP17:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT18]], label %[[TRAP17:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP17:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT18]], label %[[TRAP17:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP17]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT18]]: // CHECK-NEXT: call void @consume_sb_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1386,5 +1386,6 @@ void call_arg_transparent_union_untransparently_from_sb(int new_count, // CHECK: [[META2]] = !{!"bounds-safety-zero-init"} // CHECK: [[META3]] = !{!"bounds-safety-check-ptr-neq-null"} // CHECK: [[META4]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF5]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O0.c b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O0.c index 67646a290533b..ec781bba3a2a3 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O0.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O0.c @@ -130,7 +130,7 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -176,9 +176,9 @@ void assign_via_ptr(struct sb* ptr, int new_count, // CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[NEW_PTR_INDIRECT_ADDR]], align 8 // CHECK-NEXT: [[COUNT:%.*]] = getelementptr inbounds nuw [[STRUCT_SB]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META3:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META4:![0-9]+]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_SB]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[NEW_PTR]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] @@ -230,7 +230,7 @@ void assign_via_ptr(struct sb* ptr, int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -326,7 +326,7 @@ void assign_operator(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -419,7 +419,7 @@ void local_var_init(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -514,7 +514,7 @@ void call_arg(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -608,7 +608,7 @@ struct sb return_sb(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -646,7 +646,7 @@ void construct_not_used(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -737,7 +737,7 @@ void assign_via_ptr_nullptr(struct sb* ptr, int new_count) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -841,7 +841,7 @@ void assign_via_ptr_nested(struct nested_sb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -951,7 +951,7 @@ void assign_via_ptr_nested_v2(struct nested_sb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1008,7 +1008,7 @@ void assign_via_ptr_nested_v2(struct nested_sb* ptr, // CHECK-NEXT: br label %[[LAND_END77]], !annotation [[META2]] // CHECK: [[LAND_END77]]: // CHECK-NEXT: [[TMP6:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE43]] ], [ false, %[[CONT]] ], [ [[TMP5]], %[[LAND_END76]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT79:.*]], label %[[TRAP78:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT79:.*]], label %[[TRAP78:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP78]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1121,7 +1121,7 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1140,7 +1140,7 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sb* ptr, // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[BUF]], align 8 // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_SB]], ptr [[ARR]], i64 1 -// CHECK-NEXT: br i1 true, label %[[CONT39:.*]], label %[[TRAP38:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 true, label %[[CONT39:.*]], label %[[TRAP38:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP38]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1176,20 +1176,20 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB53:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR52]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR54:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP42]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB55:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR54]], align 8 -// CHECK-NEXT: [[TMP12:%.*]] = icmp ne ptr [[WIDE_PTR_PTR51]], null, !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT59:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP12:%.*]] = icmp ne ptr [[WIDE_PTR_PTR51]], null, !annotation [[META5:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT59:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP13:%.*]] = icmp ult ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_UB53]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP13:%.*]] = icmp ult ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_UB53]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT57]]: -// CHECK-NEXT: [[TMP14:%.*]] = icmp uge ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_LB55]], !annotation [[META6:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT59]], label %[[TRAP58:.*]], !annotation [[META6]] -// CHECK: [[TRAP58]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT57]]: +// CHECK-NEXT: [[TMP14:%.*]] = icmp uge ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_LB55]], !annotation [[META7:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT59]], label %[[TRAP58:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP58]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT59]]: // CHECK-NEXT: call void @consume_sb_arr(ptr noundef [[WIDE_PTR_PTR51]]) // CHECK-NEXT: ret void @@ -1273,7 +1273,7 @@ void array_of_struct_init(char* __bidi_indexable new_ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1323,7 +1323,7 @@ void assign_via_ptr_other_data_side_effect(struct sb_with_other_data* ptr, // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1419,7 +1419,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct sb_with_other_data* p // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1522,7 +1522,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1647,7 +1647,7 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-NEXT: br label %[[LAND_END31]], !annotation [[META2]] // CHECK: [[LAND_END31]]: // CHECK-NEXT: [[TMP10:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP9]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1755,7 +1755,7 @@ void assign_via_ptr_from_ptr(struct sb* ptr) { // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP7]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1802,9 +1802,9 @@ void assign_via_ptr_from_sb(struct sb* ptr, int new_count, // CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[COUNT:%.*]] = getelementptr inbounds nuw [[STRUCT_SB]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META3]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META4]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_SB]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 @@ -1866,7 +1866,7 @@ void assign_via_ptr_from_sb(struct sb* ptr, int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1974,7 +1974,7 @@ void assign_operator_from_sb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2079,7 +2079,7 @@ void local_var_init_from_sb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2186,7 +2186,7 @@ void call_arg_from_sb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2292,7 +2292,7 @@ struct sb return_sb_from_sb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2401,7 +2401,7 @@ void construct_not_used_from_sb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP7]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2516,7 +2516,7 @@ void assign_via_ptr_nested_from_sb(struct nested_sb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP7]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2629,7 +2629,7 @@ void assign_via_ptr_nested_v2_from_sb(struct nested_sb* ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2648,7 +2648,7 @@ void assign_via_ptr_nested_v2_from_sb(struct nested_sb* ptr, // CHECK-NEXT: [[WIDE_PTR_LB37:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR36]], align 8 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR33]], ptr [[BUF]], align 8 // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_SB]], ptr [[ARR]], i64 1 -// CHECK-NEXT: br i1 true, label %[[CONT39:.*]], label %[[TRAP38:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 true, label %[[CONT39:.*]], label %[[TRAP38:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP38]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2684,20 +2684,20 @@ void assign_via_ptr_nested_v2_from_sb(struct nested_sb* ptr, // CHECK-NEXT: [[WIDE_PTR_UB53:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR52]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR54:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP42]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB55:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR54]], align 8 -// CHECK-NEXT: [[TMP17:%.*]] = icmp ne ptr [[WIDE_PTR_PTR51]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT59:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP17:%.*]] = icmp ne ptr [[WIDE_PTR_PTR51]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT59:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP18:%.*]] = icmp ult ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_UB53]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP18]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP18:%.*]] = icmp ult ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_UB53]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP18]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT57]]: -// CHECK-NEXT: [[TMP19:%.*]] = icmp uge ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_LB55]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP19]], label %[[CONT59]], label %[[TRAP58:.*]], !annotation [[META6]] -// CHECK: [[TRAP58]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT57]]: +// CHECK-NEXT: [[TMP19:%.*]] = icmp uge ptr [[WIDE_PTR_PTR51]], [[WIDE_PTR_LB55]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP19]], label %[[CONT59]], label %[[TRAP58:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP58]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT59]]: // CHECK-NEXT: call void @consume_sb_arr(ptr noundef [[WIDE_PTR_PTR51]]) // CHECK-NEXT: ret void @@ -2791,7 +2791,7 @@ void array_of_struct_init_from_sb(char* __sized_by(new_count) new_ptr, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP7]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2841,7 +2841,7 @@ void assign_via_ptr_other_data_side_effect_from_sb(struct sb_with_other_data* pt // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2937,7 +2937,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_sb(struct sb_with_other // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3041,7 +3041,7 @@ void call_arg_transparent_union_from_sb(int new_count, // CHECK-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // CHECK: [[LAND_END30]]: // CHECK-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3081,8 +3081,9 @@ void call_arg_transparent_union_untransparently_from_sb(int new_count, } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[META3]] = !{!"bounds-safety-zero-init"} -// CHECK: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-zero-init"} +// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} +// CHECK: [[META7]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O2.c b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O2.c index 451707fdfb461..2cc6666307da5 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O2.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by-O2.c @@ -81,12 +81,12 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11:![0-9]+]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -122,7 +122,7 @@ void assign_via_ptr(struct sb* ptr, int new_count, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -159,7 +159,7 @@ void assign_operator(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -194,7 +194,7 @@ void local_var_init(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -233,7 +233,7 @@ void call_arg(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -271,7 +271,7 @@ struct sb return_sb(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -289,7 +289,7 @@ void construct_not_used(int new_count, char* __bidi_indexable new_ptr) { // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[NEW_COUNT]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -325,18 +325,18 @@ void assign_via_ptr_nullptr(struct sb* ptr, int new_count) { // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -371,18 +371,18 @@ void assign_via_ptr_nested(struct nested_sb* ptr, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -417,20 +417,20 @@ void assign_via_ptr_nested_v2(struct nested_sb* ptr, // CHECK-NEXT: [[CMP25:%.*]] = icmp slt i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp slt i32 [[NEW_COUNT]], 0, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT_NOT98:%.*]] = or i1 [[CMP28]], [[CMP25]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[SPEC_SELECT_NOT98]], label %[[TRAP]], label %[[CONT78:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT_NOT98]], label %[[TRAP]], label %[[CONT78:.*]], !prof [[PROF13:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT78]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_6_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 24 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_6_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: ret void @@ -469,16 +469,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sb* ptr, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META12:![0-9]+]] -// CHECK-NEXT: unreachable, !annotation [[META12]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META14:![0-9]+]] +// CHECK-NEXT: unreachable, !annotation [[META14]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA13:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA15:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA15:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA17:![0-9]+]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_sb_arr(ptr noundef nonnull [[ARR]]) #[[ATTR6]] @@ -516,19 +516,19 @@ void array_of_struct_init(char* __bidi_indexable new_ptr, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR6]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -548,7 +548,7 @@ void assign_via_ptr_other_data_side_effect(struct sb_with_other_data* ptr, // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(none) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[NEW_COUNT]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -556,7 +556,7 @@ void assign_via_ptr_other_data_side_effect(struct sb_with_other_data* ptr, // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR6]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 // CHECK-NEXT: tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[PTR]], i8 0, i64 16, i1 false) -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -594,18 +594,18 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct sb_with_other_data* p // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA16:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA18:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA18:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA20:![0-9]+]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA19:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA21:![0-9]+]] // CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR6]] @@ -644,7 +644,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -658,7 +658,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA20:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA22:![0-9]+]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: ret void @@ -684,7 +684,7 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-LABEL: define dso_local void @assign_via_ptr_from_ptr( // CHECK-SAME: ptr noundef captures(none) [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 8, !tbaa [[TBAA13]] +// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 8, !tbaa [[TBAA15]] // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp slt i32 [[TMP0]], 0, !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] // CHECK: [[TRAP]]: @@ -711,7 +711,7 @@ void assign_via_ptr_from_ptr(struct sb* ptr) { // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -841,13 +841,13 @@ void construct_not_used_from_sb(int new_count, // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -870,13 +870,13 @@ void assign_via_ptr_nested_from_sb(struct nested_sb* ptr, // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -898,14 +898,14 @@ void assign_via_ptr_nested_v2_from_sb(struct nested_sb* ptr, // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp slt i32 [[NEW_COUNT]], 0, !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META12]] -// CHECK-NEXT: unreachable, !annotation [[META12]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META14]] +// CHECK-NEXT: unreachable, !annotation [[META14]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA13]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA15]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[BUF]], align 8, !tbaa [[TBAA15]] +// CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[BUF]], align 8, !tbaa [[TBAA17]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_sb_arr(ptr noundef nonnull [[ARR]]) #[[ATTR6]] @@ -931,13 +931,13 @@ void array_of_struct_init_from_sb(char* __sized_by(new_count) new_ptr, // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR6]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -957,7 +957,7 @@ void assign_via_ptr_other_data_side_effect_from_sb(struct sb_with_other_data* pt // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(none) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[NEW_COUNT]], 0, !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -965,7 +965,7 @@ void assign_via_ptr_other_data_side_effect_from_sb(struct sb_with_other_data* pt // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR6]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 // CHECK-NEXT: tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[PTR]], i8 0, i64 16, i1 false) -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -1003,18 +1003,18 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_sb(struct sb_with_other // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA16]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA18]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA18]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA20]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA19]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA21]] // CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR6]] @@ -1054,7 +1054,7 @@ void call_arg_transparent_union_from_sb(int new_count, // CHECK-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1068,7 +1068,7 @@ void call_arg_transparent_union_from_sb(int new_count, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA20]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA22]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR6]] // CHECK-NEXT: ret void @@ -1094,15 +1094,17 @@ void call_arg_transparent_union_untransparently_from_sb(int new_count, // CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} // CHECK: [[META8]] = !{!"bounds-safety-generic", [[META9:![0-9]+]]} // CHECK: [[META9]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[TBAA10]] = !{[[META11:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META11]] = !{!"int", [[META6]], i64 0} -// CHECK: [[META12]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[TBAA13]] = !{[[META14:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META14]] = !{!"sb", [[META11]], i64 0, [[META4]], i64 8} -// CHECK: [[TBAA15]] = !{[[META14]], [[META4]], i64 8} -// CHECK: [[TBAA16]] = !{[[META17:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META17]] = !{!"sb_with_other_data", [[META11]], i64 0, [[META4]], i64 8, [[META11]], i64 16} -// CHECK: [[TBAA18]] = !{[[META17]], [[META4]], i64 8} -// CHECK: [[TBAA19]] = !{[[META17]], [[META11]], i64 16} -// CHECK: [[TBAA20]] = !{[[META6]], [[META6]], i64 0} +// CHECK: [[PROF10]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[TBAA11]] = !{[[META12:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META12]] = !{!"int", [[META6]], i64 0} +// CHECK: [[PROF13]] = !{!"branch_weights", i32 1048577, i32 1048575} +// CHECK: [[META14]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[TBAA15]] = !{[[META16:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META16]] = !{!"sb", [[META12]], i64 0, [[META4]], i64 8} +// CHECK: [[TBAA17]] = !{[[META16]], [[META4]], i64 8} +// CHECK: [[TBAA18]] = !{[[META19:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META19]] = !{!"sb_with_other_data", [[META12]], i64 0, [[META4]], i64 8, [[META12]], i64 16} +// CHECK: [[TBAA20]] = !{[[META19]], [[META4]], i64 8} +// CHECK: [[TBAA21]] = !{[[META19]], [[META12]], i64 16} +// CHECK: [[TBAA22]] = !{[[META6]], [[META6]], i64 0} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O0-disabled-checks.c b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O0-disabled-checks.c index 3dc80148c8261..c7c9bbfd834a6 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O0-disabled-checks.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O0-disabled-checks.c @@ -496,16 +496,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sbon* ptr, // CHECK-NEXT: br i1 [[TMP10]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT18:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[TMP11:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5:![0-9]+]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT18]], label %[[TRAP17:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP12:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT18]], label %[[TRAP17:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP17]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT18]]: // CHECK-NEXT: call void @consume_sbon_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1309,16 +1309,16 @@ void assign_via_ptr_nested_v2_from_sbon(struct nested_sbon* ptr, // CHECK-NEXT: br i1 [[TMP19]], label %[[BOUNDSCHECK_NOTNULL17:.*]], label %[[CONT19:.*]], !annotation [[META3]] // CHECK: [[BOUNDSCHECK_NOTNULL17]]: // CHECK-NEXT: [[TMP20:%.*]] = icmp ult ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_UB14]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF5]], !annotation [[META4]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]] // CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP21:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT19]], label %[[TRAP18:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP21:%.*]] = icmp uge ptr [[WIDE_PTR_PTR12]], [[WIDE_PTR_LB16]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT19]], label %[[TRAP18:.*]], !prof [[PROF5]], !annotation [[META6]] // CHECK: [[TRAP18]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] +// CHECK-NEXT: unreachable, !annotation [[META6]] // CHECK: [[CONT19]]: // CHECK-NEXT: call void @consume_sbon_arr(ptr noundef [[WIDE_PTR_PTR12]]) // CHECK-NEXT: ret void @@ -1526,5 +1526,6 @@ void call_arg_transparent_union_untransparently_from_sbon(int new_count, // CHECK: [[META2]] = !{!"bounds-safety-zero-init"} // CHECK: [[META3]] = !{!"bounds-safety-check-ptr-neq-null"} // CHECK: [[META4]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF5]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O0.c b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O0.c index 18ce78da7d731..51fc7ca88bf06 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O0.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O0.c @@ -142,7 +142,7 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -189,9 +189,9 @@ void assign_via_ptr(struct sbon* ptr, int new_count, // CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[NEW_PTR_INDIRECT_ADDR]], align 8 // CHECK-NEXT: [[COUNT:%.*]] = getelementptr inbounds nuw [[STRUCT_SBON]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META3:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META4:![0-9]+]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_SBON]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[NEW_PTR]], i64 24, i1 false), !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 0, !annotation [[META2]] @@ -256,7 +256,7 @@ void assign_via_ptr(struct sbon* ptr, int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -366,7 +366,7 @@ void assign_operator(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -473,7 +473,7 @@ void local_var_init(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -582,7 +582,7 @@ void call_arg(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -690,7 +690,7 @@ struct sbon return_sbon(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -827,7 +827,7 @@ void assign_via_ptr_nullptr(struct sbon* ptr, int new_count) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -945,7 +945,7 @@ void assign_via_ptr_nested(struct nested_sbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1070,7 +1070,7 @@ void assign_via_ptr_nested_v2(struct nested_sbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1140,7 +1140,7 @@ void assign_via_ptr_nested_v2(struct nested_sbon* ptr, // CHECK-NEXT: br label %[[LAND_END94]], !annotation [[META2]] // CHECK: [[LAND_END94]]: // CHECK-NEXT: [[TMP8:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE50]] ], [ false, %[[CONT]] ], [ [[TMP7]], %[[LOR_END93]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT96:.*]], label %[[TRAP95:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP8]], label %[[CONT96:.*]], label %[[TRAP95:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP95]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1267,7 +1267,7 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1317,20 +1317,20 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sbon* ptr, // CHECK-NEXT: [[WIDE_PTR_UB58:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR57]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR59:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP47]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB60:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR59]], align 8 -// CHECK-NEXT: [[TMP13:%.*]] = icmp ne ptr [[WIDE_PTR_PTR56]], null, !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT64:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP13:%.*]] = icmp ne ptr [[WIDE_PTR_PTR56]], null, !annotation [[META5:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT64:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP14:%.*]] = icmp ult ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_UB58]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP14:%.*]] = icmp ult ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_UB58]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP61]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT62]]: -// CHECK-NEXT: [[TMP15:%.*]] = icmp uge ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_LB60]], !annotation [[META6:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT64]], label %[[TRAP63:.*]], !annotation [[META6]] -// CHECK: [[TRAP63]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT62]]: +// CHECK-NEXT: [[TMP15:%.*]] = icmp uge ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_LB60]], !annotation [[META7:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT64]], label %[[TRAP63:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP63]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT64]]: // CHECK-NEXT: call void @consume_sbon_arr(ptr noundef [[WIDE_PTR_PTR56]]) // CHECK-NEXT: ret void @@ -1428,7 +1428,7 @@ void array_of_struct_init(char* __bidi_indexable new_ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1582,7 +1582,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct sbon_with_other_data* // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1699,7 +1699,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1766,8 +1766,8 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[COUNT1]], align 8 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_SBON]], ptr [[TMP3]], i32 0, i32 1 // CHECK-NEXT: [[TMP5:%.*]] = load ptr, ptr [[BUF]], align 8 -// CHECK-NEXT: [[TMP6:%.*]] = icmp ne ptr [[TMP5]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP6:%.*]] = icmp ne ptr [[TMP5]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP4]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP5]], i64 [[IDX_EXT]] @@ -1850,7 +1850,7 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-NEXT: br label %[[LAND_END38]], !annotation [[META2]] // CHECK: [[LAND_END38]]: // CHECK-NEXT: [[TMP15:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP14]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1901,8 +1901,8 @@ void assign_via_ptr_from_ptr(struct sbon* ptr) { // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP3]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[IDX_EXT]] @@ -1985,7 +1985,7 @@ void assign_via_ptr_from_ptr(struct sbon* ptr) { // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2033,14 +2033,14 @@ void assign_via_ptr_from_sbon(struct sbon* ptr, int new_count, // CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[COUNT:%.*]] = getelementptr inbounds nuw [[STRUCT_SBON]], ptr [[NEW]], i32 0, i32 0 -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META3]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 8, !annotation [[META4]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw [[STRUCT_SBON]], ptr [[NEW]], i32 0, i32 1 -// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META3]] +// CHECK-NEXT: store ptr null, ptr [[BUF]], align 8, !annotation [[META4]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2123,7 +2123,7 @@ void assign_via_ptr_from_sbon(struct sbon* ptr, int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2174,8 +2174,8 @@ void assign_operator_from_sbon(int new_count, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2258,7 +2258,7 @@ void assign_operator_from_sbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2306,8 +2306,8 @@ void local_var_init_from_sbon(int new_count, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2390,7 +2390,7 @@ void local_var_init_from_sbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2440,8 +2440,8 @@ void call_arg_from_sbon(int new_count, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2524,7 +2524,7 @@ void call_arg_from_sbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2573,8 +2573,8 @@ struct sbon return_sbon_from_sbon(int new_count, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -2657,7 +2657,7 @@ struct sbon return_sbon_from_sbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2709,8 +2709,8 @@ void construct_not_used_from_sbon(int new_count, // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP3]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[IDX_EXT]] @@ -2793,7 +2793,7 @@ void construct_not_used_from_sbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2851,8 +2851,8 @@ void assign_via_ptr_nested_from_sbon(struct nested_sbon* ptr, // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP3]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[IDX_EXT]] @@ -2935,7 +2935,7 @@ void assign_via_ptr_nested_from_sbon(struct nested_sbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -2991,8 +2991,8 @@ void assign_via_ptr_nested_v2_from_sbon(struct nested_sbon* ptr, // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -3075,7 +3075,7 @@ void assign_via_ptr_nested_v2_from_sbon(struct nested_sbon* ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3125,20 +3125,20 @@ void assign_via_ptr_nested_v2_from_sbon(struct nested_sbon* ptr, // CHECK-NEXT: [[WIDE_PTR_UB58:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR57]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR59:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP47]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB60:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR59]], align 8 -// CHECK-NEXT: [[TMP22:%.*]] = icmp ne ptr [[WIDE_PTR_PTR56]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP22]], label %[[BOUNDSCHECK_NOTNULL61:.*]], label %[[CONT65:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP22:%.*]] = icmp ne ptr [[WIDE_PTR_PTR56]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP22]], label %[[BOUNDSCHECK_NOTNULL61:.*]], label %[[CONT65:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL61]]: -// CHECK-NEXT: [[TMP23:%.*]] = icmp ult ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_UB58]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP23]], label %[[CONT63:.*]], label %[[TRAP62:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP23:%.*]] = icmp ult ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_UB58]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP23]], label %[[CONT63:.*]], label %[[TRAP62:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP62]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT63]]: -// CHECK-NEXT: [[TMP24:%.*]] = icmp uge ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_LB60]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP24]], label %[[CONT65]], label %[[TRAP64:.*]], !annotation [[META6]] -// CHECK: [[TRAP64]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT63]]: +// CHECK-NEXT: [[TMP24:%.*]] = icmp uge ptr [[WIDE_PTR_PTR56]], [[WIDE_PTR_LB60]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP24]], label %[[CONT65]], label %[[TRAP64:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP64]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT65]]: // CHECK-NEXT: call void @consume_sbon_arr(ptr noundef [[WIDE_PTR_PTR56]]) // CHECK-NEXT: ret void @@ -3175,8 +3175,8 @@ void array_of_struct_init_from_sbon(char* __sized_by_or_null(new_count) new_ptr, // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 // CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[NEW_PTR_ADDR]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[NEW_COUNT_ADDR]], align 4 -// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = icmp ne ptr [[TMP2]], null, !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META5]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP3]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 [[IDX_EXT]] @@ -3259,7 +3259,7 @@ void array_of_struct_init_from_sbon(char* __sized_by_or_null(new_count) new_ptr, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP12]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3413,7 +3413,7 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_sbon(struct sbon_with_o // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3531,7 +3531,7 @@ void call_arg_transparent_union_from_sbon(int new_count, // CHECK-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // CHECK: [[LAND_END37]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -3571,8 +3571,9 @@ void call_arg_transparent_union_untransparently_from_sbon(int new_count, } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[META3]] = !{!"bounds-safety-zero-init"} -// CHECK: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-zero-init"} +// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} +// CHECK: [[META7]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O2.c b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O2.c index eb1c9b1ab8e0e..eda7200a7d5df 100644 --- a/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O2.c +++ b/clang/test/BoundsSafety/CodeGen/compound-literal-sized_by_or_null-O2.c @@ -81,12 +81,12 @@ void receive_transparent_union(union TransparentUnion); // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11:![0-9]+]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -125,7 +125,7 @@ void assign_via_ptr(struct sbon* ptr, int new_count, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -165,7 +165,7 @@ void assign_operator(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -206,7 +206,7 @@ void local_var_init(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -252,7 +252,7 @@ void call_arg(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -294,7 +294,7 @@ struct sbon return_sbon(int new_count, char* __bidi_indexable new_ptr) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -311,7 +311,7 @@ void construct_not_used(int new_count, char* __bidi_indexable new_ptr) { // CHECK-LABEL: define dso_local void @assign_via_ptr_nullptr( // CHECK-SAME: ptr noundef writeonly captures(none) initializes((0, 16)) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]]) local_unnamed_addr #[[ATTR5:[0-9]+]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -349,18 +349,18 @@ void assign_via_ptr_nullptr(struct sbon* ptr, int new_count) { // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -398,18 +398,18 @@ void assign_via_ptr_nested(struct nested_sbon* ptr, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -443,24 +443,24 @@ void assign_via_ptr_nested_v2(struct nested_sbon* ptr, // CHECK-NEXT: [[CONV:%.*]] = sext i32 [[NEW_COUNT]] to i64, !annotation [[META2]] // CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[AGG_TEMP1_SROA_1_0_COPYLOAD]] to i64 // CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]] to i64 -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META12:![0-9]+]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META13:![0-9]+]] // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT95]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT95]], label %[[TRAP]], !prof [[PROF14:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT95]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_6_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 24 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_6_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: ret void @@ -502,16 +502,16 @@ void assign_via_ptr_nested_v3(struct nested_and_outer_sbon* ptr, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META13:![0-9]+]] -// CHECK-NEXT: unreachable, !annotation [[META13]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META15:![0-9]+]] +// CHECK-NEXT: unreachable, !annotation [[META15]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA14:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA16:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA16:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA18:![0-9]+]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_sbon_arr(ptr noundef nonnull [[ARR]]) #[[ATTR7]] @@ -552,19 +552,19 @@ void array_of_struct_init(char* __bidi_indexable new_ptr, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR7]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -584,13 +584,13 @@ void assign_via_ptr_other_data_side_effect(struct sbon_with_other_data* ptr, // CHECK-SAME: ptr noundef writeonly captures(none) initializes((0, 24)) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(none) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR7]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr null, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -631,18 +631,18 @@ void assign_via_ptr_other_data_side_effect_zero_ptr(struct sbon_with_other_data* // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA17:![0-9]+]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA19:![0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA19:![0-9]+]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA21:![0-9]+]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA20:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA22:![0-9]+]] // CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR7]] @@ -684,7 +684,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -698,7 +698,7 @@ void call_arg_transparent_union(int new_count, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA21:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA23:![0-9]+]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR7]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR7]] // CHECK-NEXT: ret void @@ -723,10 +723,10 @@ void call_arg_transparent_union_untransparently(int new_count, // CHECK-LABEL: define dso_local void @assign_via_ptr_from_ptr( // CHECK-SAME: ptr noundef captures(none) [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 8, !tbaa [[TBAA14]] +// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 8, !tbaa [[TBAA16]] // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 -// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[TBAA16]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META22:![0-9]+]] +// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[TBAA18]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META24:![0-9]+]] // CHECK-NEXT: [[CMP_NOT50:%.*]] = icmp slt i32 [[TMP0]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = select i1 [[DOTNOT]], i1 [[CMP_NOT50]], i1 false, !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -748,7 +748,7 @@ void assign_via_ptr_from_ptr(struct sbon* ptr) { // CHECK-LABEL: define dso_local void @assign_via_ptr_from_sbon( // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -756,7 +756,7 @@ void assign_via_ptr_from_ptr(struct sbon* ptr) { // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 @@ -774,7 +774,7 @@ void assign_via_ptr_from_sbon(struct sbon* ptr, int new_count, // CHECK-LABEL: define dso_local void @assign_operator_from_sbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(address_is_null) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT48:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT48]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -797,7 +797,7 @@ void assign_operator_from_sbon(int new_count, // CHECK-LABEL: define dso_local void @local_var_init_from_sbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(address_is_null) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -818,7 +818,7 @@ void local_var_init_from_sbon(int new_count, // CHECK-LABEL: define dso_local void @call_arg_from_sbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -844,7 +844,7 @@ void call_arg_from_sbon(int new_count, // CHECK-LABEL: define dso_local [2 x i64] @return_sbon_from_sbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -869,7 +869,7 @@ struct sbon return_sbon_from_sbon(int new_count, // CHECK-LABEL: define dso_local void @construct_not_used_from_sbon( // CHECK-SAME: i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(address_is_null) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -890,7 +890,7 @@ void construct_not_used_from_sbon(int new_count, // CHECK-LABEL: define dso_local void @assign_via_ptr_nested_from_sbon( // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], ptr noundef [[NEW_PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[DOTNOT]], [[CMP_NOT46]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -898,13 +898,13 @@ void construct_not_used_from_sbon(int new_count, // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -921,7 +921,7 @@ void assign_via_ptr_nested_from_sbon(struct nested_sbon* ptr, // CHECK-LABEL: define dso_local void @assign_via_ptr_nested_v2_from_sbon( // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], ptr noundef [[NEW_PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[DOTNOT]], [[CMP_NOT46]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -929,13 +929,13 @@ void assign_via_ptr_nested_from_sbon(struct nested_sbon* ptr, // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -954,19 +954,19 @@ void assign_via_ptr_nested_v2_from_sbon(struct nested_sbon* ptr, // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[ARR:%.*]] = alloca [2 x %struct.sbon], align 8 // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[ARR]]) #[[ATTR7]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT65:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[DOTNOT]], [[CMP_NOT65]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] // CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META13]] -// CHECK-NEXT: unreachable, !annotation [[META13]] +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META15]] +// CHECK-NEXT: unreachable, !annotation [[META15]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA14]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[ARR]], align 8, !tbaa [[TBAA16]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 8 -// CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[BUF]], align 8, !tbaa [[TBAA16]] +// CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[BUF]], align 8, !tbaa [[TBAA18]] // CHECK-NEXT: [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds nuw i8, ptr [[ARR]], i64 16 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[ARRAYINIT_ELEMENT]], i8 0, i64 16, i1 false) // CHECK-NEXT: call void @consume_sbon_arr(ptr noundef nonnull [[ARR]]) #[[ATTR7]] @@ -985,7 +985,7 @@ void array_of_struct_init_from_sbon(char* __sized_by_or_null(new_count) new_ptr, // CHECK-LABEL: define dso_local void @assign_via_ptr_other_data_side_effect_from_sbon( // CHECK-SAME: ptr noundef writeonly captures(none) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META22]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[NEW_PTR]], null, !annotation [[META24]] // CHECK-NEXT: [[CMP_NOT46:%.*]] = icmp slt i32 [[NEW_COUNT]], 0 // CHECK-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT46]], [[DOTNOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -994,13 +994,13 @@ void array_of_struct_init_from_sbon(char* __sized_by_or_null(new_count) new_ptr, // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR7]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr [[NEW_PTR]], ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -1020,13 +1020,13 @@ void assign_via_ptr_other_data_side_effect_from_sbon(struct sbon_with_other_data // CHECK-SAME: ptr noundef writeonly captures(none) initializes((0, 24)) [[PTR:%.*]], i32 noundef [[NEW_COUNT:%.*]], ptr noundef readnone captures(none) [[NEW_PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CALL:%.*]] = tail call i32 @get_int() #[[ATTR7]] -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[PTR]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 4 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_2_0__SROA_IDX]], align 4 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 // CHECK-NEXT: store ptr null, ptr [[DOTCOMPOUNDLITERAL_SROA_3_0__SROA_IDX]], align 8, !tbaa [[TBAA3]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[CALL]], ptr [[DOTCOMPOUNDLITERAL_SROA_4_0__SROA_IDX]], align 8, !tbaa [[TBAA11]] // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 20 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0__SROA_IDX]], align 4 // CHECK-NEXT: ret void @@ -1067,18 +1067,18 @@ void assign_via_ptr_other_data_side_effect_zero_ptr_from_sbon(struct sbon_with_o // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA17]] +// CHECK-NEXT: store i32 [[NEW_COUNT]], ptr [[AGG_TMP]], align 8, !tbaa [[TBAA19]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 4 // CHECK-NEXT: store i32 0, ptr [[TMP0]], align 4 // CHECK-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 8 -// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA19]] +// CHECK-NEXT: store ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], ptr [[BUF]], align 8, !tbaa [[TBAA21]] // CHECK-NEXT: [[OTHER:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 16 -// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA20]] +// CHECK-NEXT: store i32 0, ptr [[OTHER]], align 8, !tbaa [[TBAA22]] // CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TMP]], i64 20 // CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[AGG_TMP]]) #[[ATTR7]] @@ -1121,7 +1121,7 @@ void call_arg_transparent_union_from_sbon(int new_count, // CHECK-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[NEW_COUNT]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -1135,7 +1135,7 @@ void call_arg_transparent_union_from_sbon(int new_count, // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 16 // CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_4_0_BYVAL_TEMP_SROA_IDX]], align 8 // CHECK-NEXT: [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 20 -// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA21]] +// CHECK-NEXT: store i32 0, ptr [[DOTCOMPOUNDLITERAL_SROA_5_0_BYVAL_TEMP_SROA_IDX]], align 4, !tbaa [[TBAA23]] // CHECK-NEXT: call void @receive_transparent_union(ptr noundef nonnull [[BYVAL_TEMP]]) #[[ATTR7]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 24, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR7]] // CHECK-NEXT: ret void @@ -1161,17 +1161,19 @@ void call_arg_transparent_union_untransparently_from_sbon(int new_count, // CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} // CHECK: [[META8]] = !{!"bounds-safety-generic", [[META9:![0-9]+]]} // CHECK: [[META9]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[TBAA10]] = !{[[META11:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META11]] = !{!"int", [[META6]], i64 0} -// CHECK: [[META12]] = !{[[META9]]} -// CHECK: [[META13]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[TBAA14]] = !{[[META15:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META15]] = !{!"sbon", [[META11]], i64 0, [[META4]], i64 8} -// CHECK: [[TBAA16]] = !{[[META15]], [[META4]], i64 8} -// CHECK: [[TBAA17]] = !{[[META18:![0-9]+]], [[META11]], i64 0} -// CHECK: [[META18]] = !{!"sbon_with_other_data", [[META11]], i64 0, [[META4]], i64 8, [[META11]], i64 16} -// CHECK: [[TBAA19]] = !{[[META18]], [[META4]], i64 8} -// CHECK: [[TBAA20]] = !{[[META18]], [[META11]], i64 16} -// CHECK: [[TBAA21]] = !{[[META6]], [[META6]], i64 0} -// CHECK: [[META22]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[PROF10]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[TBAA11]] = !{[[META12:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META12]] = !{!"int", [[META6]], i64 0} +// CHECK: [[META13]] = !{[[META9]]} +// CHECK: [[PROF14]] = !{!"branch_weights", i32 -8192, i32 8191} +// CHECK: [[META15]] = !{!"bounds-safety-generic", !"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[TBAA16]] = !{[[META17:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META17]] = !{!"sbon", [[META12]], i64 0, [[META4]], i64 8} +// CHECK: [[TBAA18]] = !{[[META17]], [[META4]], i64 8} +// CHECK: [[TBAA19]] = !{[[META20:![0-9]+]], [[META12]], i64 0} +// CHECK: [[META20]] = !{!"sbon_with_other_data", [[META12]], i64 0, [[META4]], i64 8, [[META12]], i64 16} +// CHECK: [[TBAA21]] = !{[[META20]], [[META4]], i64 8} +// CHECK: [[TBAA22]] = !{[[META20]], [[META12]], i64 16} +// CHECK: [[TBAA23]] = !{[[META6]], [[META6]], i64 0} +// CHECK: [[META24]] = !{!"bounds-safety-check-ptr-neq-null"} //. diff --git a/clang/test/BoundsSafety/CodeGen/counted-by-nested-assignments-O0.c b/clang/test/BoundsSafety/CodeGen/counted-by-nested-assignments-O0.c index 61b029bf0a782..7625555020374 100644 --- a/clang/test/BoundsSafety/CodeGen/counted-by-nested-assignments-O0.c +++ b/clang/test/BoundsSafety/CodeGen/counted-by-nested-assignments-O0.c @@ -91,7 +91,7 @@ // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP15:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP26]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -220,7 +220,7 @@ void foo(int *__counted_by(count) x, unsigned count) { // CHECK-NEXT: br label %[[LAND_END31]], !annotation [[META2]] // CHECK: [[LAND_END31]]: // CHECK-NEXT: [[TMP16:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP15]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -293,4 +293,5 @@ void bar(int *__counted_by(count) x, int count) { //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} //. diff --git a/clang/test/BoundsSafety/CodeGen/counted-by-nested-assignments-O2.c b/clang/test/BoundsSafety/CodeGen/counted-by-nested-assignments-O2.c index d2bbe3ef9c4dd..c042170964c1c 100644 --- a/clang/test/BoundsSafety/CodeGen/counted-by-nested-assignments-O2.c +++ b/clang/test/BoundsSafety/CodeGen/counted-by-nested-assignments-O2.c @@ -5,12 +5,6 @@ // RUN: %clang_cc1 -triple x86_64 -fbounds-safety -emit-llvm -fno-bounds-safety-bringup-missing-checks=indirect_count_update -O2 %s -o - | FileCheck %s --check-prefix WITHOUT #include -// -// WITHOUT-LABEL: define dso_local void @foo( -// WITHOUT-SAME: ptr noundef writeonly captures(none) initializes((0, 4)) [[X:%.*]], i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { -// WITHOUT-NEXT: [[ENTRY:.*:]] -// WITHOUT-NEXT: store i32 0, ptr [[X]], align 4, !tbaa [[TBAA2:![0-9]+]] -// WITHOUT-NEXT: ret void // CHECK-LABEL: define dso_local void @foo( // CHECK-SAME: ptr noundef writeonly captures(address) [[X:%.*]], i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { // CHECK-NEXT: [[ENTRY:.*:]] @@ -28,14 +22,20 @@ // CHECK-NEXT: [[GEPDIFF:%.*]] = add nsw i64 [[ADD_PTR_IDX]], -4, !annotation [[META5:![0-9]+]] // CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = ashr exact i64 [[GEPDIFF]], 2, !annotation [[META2]] // CHECK-NEXT: [[CMP26_NOT:%.*]] = icmp slt i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP26_NOT]], label %[[TRAP]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP26_NOT]], label %[[TRAP]], label %[[CONT:.*]], !prof [[PROF7:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 0, ptr [[X]], align 4, !tbaa [[TBAA7:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[X]], align 4, !tbaa [[TBAA8:![0-9]+]] // CHECK-NEXT: ret void // +// WITHOUT-LABEL: define dso_local void @foo( +// WITHOUT-SAME: ptr noundef writeonly captures(none) initializes((0, 4)) [[X:%.*]], i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { +// WITHOUT-NEXT: [[ENTRY:.*:]] +// WITHOUT-NEXT: store i32 0, ptr [[X]], align 4, !tbaa [[TBAA2:![0-9]+]] +// WITHOUT-NEXT: ret void +// void foo(int *__counted_by(count) x, unsigned count) { *x++ = 0; #ifdef WITH @@ -46,13 +46,6 @@ void foo(int *__counted_by(count) x, unsigned count) { #endif } -// -// WITHOUT-LABEL: define dso_local void @bar( -// WITHOUT-SAME: ptr noundef writeonly captures(none) initializes((4, 8)) [[X:%.*]], i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { -// WITHOUT-NEXT: [[ENTRY:.*:]] -// WITHOUT-NEXT: [[BOUND_PTR_ARITH:%.*]] = getelementptr i8, ptr [[X]], i64 4 -// WITHOUT-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA2]] -// WITHOUT-NEXT: ret void // CHECK-LABEL: define dso_local void @bar( // CHECK-SAME: ptr noundef writeonly captures(address) [[X:%.*]], i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] @@ -65,21 +58,28 @@ void foo(int *__counted_by(count) x, unsigned count) { // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP15_NOT]], [[CMP_NOT]], !annotation [[META2]] // CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[LAND_RHS:.*]], !annotation [[META2]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[COUNT]], -1, !annotation [[META11:![0-9]+]] +// CHECK-NEXT: [[SUB:%.*]] = add nsw i32 [[COUNT]], -1, !annotation [[META12:![0-9]+]] // CHECK-NEXT: [[CONV:%.*]] = sext i32 [[SUB]] to i64, !annotation [[META2]] // CHECK-NEXT: [[GEPDIFF:%.*]] = add nsw i64 [[ADD_PTR_IDX]], -4, !annotation [[META5]] // CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = ashr exact i64 [[GEPDIFF]], 2, !annotation [[META2]] // CHECK-NEXT: [[CMP26:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP29:%.*]] = icmp sgt i32 [[COUNT]], 0, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP29]], [[CMP26]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF13:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA7]] +// CHECK-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA8]] // CHECK-NEXT: ret void // +// WITHOUT-LABEL: define dso_local void @bar( +// WITHOUT-SAME: ptr noundef writeonly captures(none) initializes((4, 8)) [[X:%.*]], i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { +// WITHOUT-NEXT: [[ENTRY:.*:]] +// WITHOUT-NEXT: [[BOUND_PTR_ARITH:%.*]] = getelementptr i8, ptr [[X]], i64 4 +// WITHOUT-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA2]] +// WITHOUT-NEXT: ret void +// void bar(int *__counted_by(count) x, int count) { #ifdef WITH // NOTE: It's necessary to exclude the count update with @@ -90,19 +90,22 @@ void bar(int *__counted_by(count) x, int count) { *(x = x+1) = 0; } -// WITHOUT: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0} -// WITHOUT: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0} -// WITHOUT: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0} -// WITHOUT: [[META5]] = !{!"Simple C/C++ TBAA"} //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} // CHECK: [[META3]] = !{[[META4:![0-9]+]]} // CHECK: [[META4]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} // CHECK: [[META5]] = !{!"bounds-safety-generic", [[META6:![0-9]+]]} // CHECK: [[META6]] = !{!"bounds-safety-missed-optimization-nuw", !"Check can not be removed because the arithmetic operation might wrap in the unsigned sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[TBAA7]] = !{[[META8:![0-9]+]], [[META8]], i64 0} -// CHECK: [[META8]] = !{!"int", [[META9:![0-9]+]], i64 0} -// CHECK: [[META9]] = !{!"omnipotent char", [[META10:![0-9]+]], i64 0} -// CHECK: [[META10]] = !{!"Simple C/C++ TBAA"} -// CHECK: [[META11]] = !{[[META6]]} +// CHECK: [[PROF7]] = !{!"branch_weights", i32 1, i32 1048575} +// CHECK: [[TBAA8]] = !{[[META9:![0-9]+]], [[META9]], i64 0} +// CHECK: [[META9]] = !{!"int", [[META10:![0-9]+]], i64 0} +// CHECK: [[META10]] = !{!"omnipotent char", [[META11:![0-9]+]], i64 0} +// CHECK: [[META11]] = !{!"Simple C/C++ TBAA"} +// CHECK: [[META12]] = !{[[META6]]} +// CHECK: [[PROF13]] = !{!"branch_weights", i32 1048575, i32 1} +//. +// WITHOUT: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0} +// WITHOUT: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0} +// WITHOUT: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0} +// WITHOUT: [[META5]] = !{!"Simple C/C++ TBAA"} //. diff --git a/clang/test/BoundsSafety/CodeGen/counted-by-or-null-from-bidi-O2.c b/clang/test/BoundsSafety/CodeGen/counted-by-or-null-from-bidi-O2.c index 3f37ca69808bc..f9825f548bac9 100644 --- a/clang/test/BoundsSafety/CodeGen/counted-by-or-null-from-bidi-O2.c +++ b/clang/test/BoundsSafety/CodeGen/counted-by-or-null-from-bidi-O2.c @@ -41,7 +41,7 @@ int * __counted_by_or_null(len) foo(int * __bidi_indexable p, int len) { // CHECK-NEXT: [[CMP34:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // CHECK-NEXT: [[CMP37:%.*]] = icmp sgt i32 [[LEN]], -1, !annotation [[META2]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP37]], [[CMP34]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR7:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -56,7 +56,7 @@ void foo_assign(int * __bidi_indexable p, int len) { // CHECK-LABEL: define dso_local void @bar( // CHECK-SAME: ptr dead_on_unwind noalias writable writeonly sret(%"__bounds_safety::wide_ptr.bidi_indexable") align 8 captures(none) initializes((0, 24)) [[AGG_RESULT:%.*]], ptr noundef [[P:%.*]], i32 noundef [[LEN:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] { // CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META10:![0-9]+]] +// CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META11:![0-9]+]] // CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[LEN]] to i64 // CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P]], i64 [[IDX_EXT]] // CHECK-NEXT: [[ADD_PTR_SINK:%.*]] = select i1 [[DOTNOT]], ptr null, ptr [[ADD_PTR]] @@ -132,5 +132,6 @@ int *__bidi_indexable null_count_too_big(void) { // CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} // CHECK: [[META8]] = !{!"bounds-safety-generic", [[META9:![0-9]+]]} // CHECK: [[META9]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[META10]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[PROF10]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META11]] = !{!"bounds-safety-check-ptr-neq-null"} //. diff --git a/clang/test/BoundsSafety/CodeGen/counted_by_inc_constant_count_valid_codegen.c b/clang/test/BoundsSafety/CodeGen/counted_by_inc_constant_count_valid_codegen.c index cecd04fc48b9e..eb143ec4df649 100644 --- a/clang/test/BoundsSafety/CodeGen/counted_by_inc_constant_count_valid_codegen.c +++ b/clang/test/BoundsSafety/CodeGen/counted_by_inc_constant_count_valid_codegen.c @@ -94,7 +94,7 @@ // CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META2]] // CHECK: [[LAND_END28]]: // CHECK-NEXT: [[TMP14:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP13]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -109,4 +109,5 @@ void test_cb_const_inc(int* __counted_by(3) p) { // expected-note{{__counted_by } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} //. diff --git a/clang/test/BoundsSafety/CodeGen/counted_by_or_null_call-O2.c b/clang/test/BoundsSafety/CodeGen/counted_by_or_null_call-O2.c index fa3adb7e2bb62..1c209d902b89e 100644 --- a/clang/test/BoundsSafety/CodeGen/counted_by_or_null_call-O2.c +++ b/clang/test/BoundsSafety/CodeGen/counted_by_or_null_call-O2.c @@ -109,7 +109,7 @@ void caller_6(int *__counted_by(len) p, int len) { // CHECK-NEXT: [[CMP51:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META3]] // CHECK-NEXT: [[CMP54:%.*]] = icmp sgt i32 [[LEN]], -1, !annotation [[META3]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP54]], [[CMP51]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label [[CONT]], label [[TRAP]], !annotation [[META3]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label [[CONT]], label [[TRAP]], !prof [[PROF11:![0-9]+]], !annotation [[META3]] // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META3]] // CHECK-NEXT: unreachable, !annotation [[META3]] @@ -127,7 +127,7 @@ void caller_7(int *__bidi_indexable p, int len) { // CHECK-NEXT: [[TOBOOL_NOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META3]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = icmp ult i32 [[LEN]], 2 // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[TOBOOL_NOT]], [[SPEC_SELECT]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT:%.*]], label [[TRAP:%.*]], !annotation [[META3]] +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF12:![0-9]+]], !annotation [[META3]] // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META3]] // CHECK-NEXT: unreachable, !annotation [[META3]] @@ -157,9 +157,9 @@ void caller_9(int *__counted_by(*len) *out, int *len){ // CHECK-NEXT: [[COUNT:%.*]] = alloca i32, align 4 // CHECK-NEXT: [[P:%.*]] = alloca ptr, align 8 // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[COUNT]]) #[[ATTR5]] -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 4, !annotation [[META11:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 4, !annotation [[META13:![0-9]+]] // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[P]]) #[[ATTR5]] -// CHECK-NEXT: store ptr null, ptr [[P]], align 8, !annotation [[META11]] +// CHECK-NEXT: store ptr null, ptr [[P]], align 8, !annotation [[META13]] // CHECK-NEXT: call void @bar(ptr noundef nonnull [[P]], ptr noundef nonnull [[COUNT]]) #[[ATTR5]] // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[TBAA4]] // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[TMP0]], null, !annotation [[META2]] @@ -168,15 +168,15 @@ void caller_9(int *__counted_by(*len) *out, int *len){ // CHECK-NEXT: [[CMP_NOT:%.*]] = select i1 [[DOTNOT]], i1 [[CMP_NOT83]], i1 false, !annotation [[META3]] // CHECK-NEXT: br i1 [[CMP_NOT]], label [[TRAP:%.*]], label [[LAND_RHS:%.*]], !annotation [[META3]] // CHECK: trap: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META12:![0-9]+]] -// CHECK-NEXT: unreachable, !annotation [[META12]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META14:![0-9]+]] +// CHECK-NEXT: unreachable, !annotation [[META14]] // CHECK: land.rhs: // CHECK-NEXT: br i1 [[DOTNOT]], label [[LOR_RHS:%.*]], label [[CONT60:%.*]], !annotation [[META3]] // CHECK: lor.rhs: // CHECK-NEXT: [[CMP54:%.*]] = icmp sge i32 [[TMP1]], [[LEN]], !annotation [[META3]] // CHECK-NEXT: [[CMP57:%.*]] = icmp sgt i32 [[LEN]], -1, !annotation [[META3]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP57]], [[CMP54]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label [[CONT60]], label [[TRAP]], !annotation [[META3]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label [[CONT60]], label [[TRAP]], !prof [[PROF11]], !annotation [[META3]] // CHECK: cont60: // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[P]]) #[[ATTR5]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[COUNT]]) #[[ATTR5]] @@ -201,6 +201,8 @@ int *__counted_by_or_null(len) caller_10(int len) { // CHECK: [[META8]] = !{!"Simple C/C++ TBAA"} // CHECK: [[META9]] = !{!"bounds-safety-generic", [[META10:![0-9]+]]} // CHECK: [[META10]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[META11]] = !{!"bounds-safety-zero-init"} -// CHECK: [[META12]] = !{!"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound", !"bounds-safety-generic"} +// CHECK: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[PROF12]] = !{!"branch_weights", i32 2097151, i32 1} +// CHECK: [[META13]] = !{!"bounds-safety-zero-init"} +// CHECK: [[META14]] = !{!"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound", !"bounds-safety-generic"} //. diff --git a/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-counted-by-signed-O2.c b/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-counted-by-signed-O2.c index 659adbb87e94a..e38406aa074f3 100644 --- a/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-counted-by-signed-O2.c +++ b/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-counted-by-signed-O2.c @@ -8,8 +8,8 @@ // CHECK-LABEL: @foo1( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP26:%.*]] = icmp sgt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[OR_COND:%.*]] = icmp sgt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -24,8 +24,8 @@ void foo1(int *__counted_by(*len) buf, int *len) { // CHECK-LABEL: @foo2( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP26:%.*]] = icmp sgt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[OR_COND:%.*]] = icmp sgt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -41,8 +41,8 @@ void foo2(int *__counted_by(*len) buf, int *len) { // CHECK-LABEL: @bar1( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP26:%.*]] = icmp sgt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[OR_COND:%.*]] = icmp sgt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -59,8 +59,8 @@ void bar1(int *__counted_by(*len) buf, int *len) { // CHECK-LABEL: @bar2( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP26:%.*]] = icmp sgt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[OR_COND:%.*]] = icmp sgt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} diff --git a/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-counted-by-unsigned-O2.c b/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-counted-by-unsigned-O2.c index 5bafe378fa7c6..cf781585e8e98 100644 --- a/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-counted-by-unsigned-O2.c +++ b/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-counted-by-unsigned-O2.c @@ -8,11 +8,11 @@ // CHECK-LABEL: @foo1( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP26:%.*]] = icmp ugt i32 [[TMP0]], 41 -// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[CMP26:%.*]] = icmp ugt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont: // CHECK-NEXT: store i32 42, ptr [[LEN]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: ret void @@ -24,11 +24,11 @@ void foo1(int *__counted_by(*len) buf, unsigned *len) { // CHECK-LABEL: @foo2( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP26:%.*]] = icmp ugt i32 [[TMP0]], 41 -// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[CMP26:%.*]] = icmp ugt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont: // CHECK-NEXT: store i32 42, ptr [[LEN]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: ret void @@ -41,11 +41,11 @@ void foo2(int *__counted_by(*len) buf, unsigned *len) { // CHECK-LABEL: @bar1( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP26:%.*]] = icmp ugt i32 [[TMP0]], 41 -// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[CMP26:%.*]] = icmp ugt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont: // CHECK-NEXT: store i32 10, ptr [[LEN]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: ret void @@ -59,11 +59,11 @@ void bar1(int *__counted_by(*len) buf, unsigned *len) { // CHECK-LABEL: @bar2( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[LEN:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP26:%.*]] = icmp ugt i32 [[TMP0]], 41 -// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[CMP26:%.*]] = icmp ugt i32 [[TMP0]], 41, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP26]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont: // CHECK-NEXT: store i32 42, ptr [[LEN]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: br label [[TRAP]] @@ -78,8 +78,8 @@ inline void baz1(int *__counted_by(*len) buf, unsigned *len) { *len = 11; } // CHECK-LABEL: @baz2( // CHECK-NEXT: trap.i: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // void baz2(void) { int arr[10]; diff --git a/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-sized-by-signed-O2.c b/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-sized-by-signed-O2.c index 063ae17692d8a..9f3280f328407 100644 --- a/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-sized-by-signed-O2.c +++ b/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-sized-by-signed-O2.c @@ -9,7 +9,7 @@ // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE:%.*]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[CMP33:%.*]] = icmp sgt i32 [[TMP0]], 39, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -25,7 +25,7 @@ void foo1(int *__sized_by(*size) buf, int *size) { // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE:%.*]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[CMP33:%.*]] = icmp sgt i32 [[TMP0]], 39, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -42,7 +42,7 @@ void foo2(int *__sized_by(*size) buf, int *size) { // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE:%.*]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[CMP33:%.*]] = icmp sgt i32 [[TMP0]], 39, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -60,7 +60,7 @@ void bar1(int *__sized_by(*size) buf, int *size) { // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE:%.*]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[CMP33:%.*]] = icmp sgt i32 [[TMP0]], 39, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} diff --git a/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-sized-by-unsigned-O2.c b/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-sized-by-unsigned-O2.c index 3b29cadf63556..950ca7e73cd1e 100644 --- a/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-sized-by-unsigned-O2.c +++ b/clang/test/BoundsSafety/CodeGen/dynamic-inout-count-sized-by-unsigned-O2.c @@ -8,11 +8,11 @@ // CHECK-LABEL: @foo1( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP33:%.*]] = icmp ugt i32 [[TMP0]], 39 -// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[CMP33:%.*]] = icmp ugt i32 [[TMP0]], 39, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont: // CHECK-NEXT: store i32 40, ptr [[SIZE]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: ret void @@ -24,11 +24,11 @@ void foo1(int *__sized_by(*size) buf, unsigned *size) { // CHECK-LABEL: @foo2( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP33:%.*]] = icmp ugt i32 [[TMP0]], 39 -// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[CMP33:%.*]] = icmp ugt i32 [[TMP0]], 39, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont: // CHECK-NEXT: store i32 40, ptr [[SIZE]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: ret void @@ -41,11 +41,11 @@ void foo2(int *__sized_by(*size) buf, unsigned *size) { // CHECK-LABEL: @bar1( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP33:%.*]] = icmp ugt i32 [[TMP0]], 39 -// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[CMP33:%.*]] = icmp ugt i32 [[TMP0]], 39, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont: // CHECK-NEXT: store i32 8, ptr [[SIZE]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: ret void @@ -59,11 +59,11 @@ void bar1(int *__sized_by(*size) buf, unsigned *size) { // CHECK-LABEL: @bar2( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[SIZE:%.*]], align 4, {{!tbaa ![0-9]+}} -// CHECK-NEXT: [[CMP33:%.*]] = icmp ugt i32 [[TMP0]], 39 -// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: [[CMP33:%.*]] = icmp ugt i32 [[TMP0]], 39, {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP33]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: trap: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont: // CHECK-NEXT: store i32 40, ptr [[SIZE]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: br label [[TRAP]] @@ -78,8 +78,8 @@ inline void baz1(int *__sized_by(*size) buf, unsigned *size) { *size = 64; } // CHECK-LABEL: @baz2( // CHECK-NEXT: trap.i: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], {{!annotation ![0-9]+}} -// CHECK-NEXT: unreachable +// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], {{!annotation ![0-9]+}} +// CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // void baz2(void) { int arr[10]; diff --git a/clang/test/BoundsSafety/CodeGen/ended-by-nested-assignments-O0.c b/clang/test/BoundsSafety/CodeGen/ended-by-nested-assignments-O0.c index 7ee4eb0bdc376..d0820fdb2fa50 100644 --- a/clang/test/BoundsSafety/CodeGen/ended-by-nested-assignments-O0.c +++ b/clang/test/BoundsSafety/CodeGen/ended-by-nested-assignments-O0.c @@ -110,7 +110,7 @@ // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP30:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP33]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP30]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP30]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -254,7 +254,7 @@ void foo(int *__ended_by(end) start, int * end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP30:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP33]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP30]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP30]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -358,4 +358,5 @@ void bar(int *__ended_by(end) start, int * end) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} //. diff --git a/clang/test/BoundsSafety/CodeGen/ended-by-nested-assignments-O2.c b/clang/test/BoundsSafety/CodeGen/ended-by-nested-assignments-O2.c index edeb090c96121..5cd24d89162b2 100644 --- a/clang/test/BoundsSafety/CodeGen/ended-by-nested-assignments-O2.c +++ b/clang/test/BoundsSafety/CodeGen/ended-by-nested-assignments-O2.c @@ -5,13 +5,6 @@ // RUN: %clang_cc1 -triple x86_64 -fbounds-safety -emit-llvm -O2 -fno-bounds-safety-bringup-missing-checks=indirect_count_update %s -o - | FileCheck --check-prefix WITHOUT %s #include -// -// WITHOUT-LABEL: define dso_local void @foo( -// WITHOUT-SAME: ptr noundef writeonly captures(none) initializes((0, 4)) [[START:%.*]], ptr noundef writeonly captures(none) initializes((0, 4)) [[END:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { -// WITHOUT-NEXT: [[ENTRY:.*:]] -// WITHOUT-NEXT: store i32 0, ptr [[END]], align 4, !tbaa [[TBAA2:![0-9]+]] -// WITHOUT-NEXT: store i32 0, ptr [[START]], align 4, !tbaa [[TBAA2]] -// WITHOUT-NEXT: ret void // CHECK-LABEL: define dso_local void @foo( // CHECK-SAME: ptr noundef writeonly captures(address) [[START:%.*]], ptr noundef writeonly captures(address) [[END:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { // CHECK-NEXT: [[ENTRY:.*:]] @@ -22,29 +15,27 @@ // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP_NOT]], [[CMP22_NOT]], !annotation [[META2]] // CHECK-NEXT: [[CMP33_NOT:%.*]] = icmp ugt ptr [[START]], [[BOUND_PTR_ARITH3]], !annotation [[META2]] // CHECK-NEXT: [[OR_COND41:%.*]] = or i1 [[CMP33_NOT]], [[OR_COND]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[OR_COND41]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[OR_COND41]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 0, ptr [[END]], align 4, !tbaa [[TBAA3:![0-9]+]] -// CHECK-NEXT: store i32 0, ptr [[START]], align 4, !tbaa [[TBAA3]] +// CHECK-NEXT: store i32 0, ptr [[END]], align 4, !tbaa [[TBAA4:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[START]], align 4, !tbaa [[TBAA4]] // CHECK-NEXT: ret void // +// WITHOUT-LABEL: define dso_local void @foo( +// WITHOUT-SAME: ptr noundef writeonly captures(none) initializes((0, 4)) [[START:%.*]], ptr noundef writeonly captures(none) initializes((0, 4)) [[END:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { +// WITHOUT-NEXT: [[ENTRY:.*:]] +// WITHOUT-NEXT: store i32 0, ptr [[END]], align 4, !tbaa [[TBAA2:![0-9]+]] +// WITHOUT-NEXT: store i32 0, ptr [[START]], align 4, !tbaa [[TBAA2]] +// WITHOUT-NEXT: ret void +// void foo(int *__ended_by(end) start, int * end) { *end-- = 0; *start++ = 0; } -// -// WITHOUT-LABEL: define dso_local void @bar( -// WITHOUT-SAME: ptr noundef writeonly captures(none) initializes((4, 8)) [[START:%.*]], ptr noundef writeonly captures(none) initializes((-4, 0)) [[END:%.*]]) local_unnamed_addr #[[ATTR0]] { -// WITHOUT-NEXT: [[ENTRY:.*:]] -// WITHOUT-NEXT: [[BOUND_PTR_ARITH:%.*]] = getelementptr i8, ptr [[START]], i64 4 -// WITHOUT-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA2]] -// WITHOUT-NEXT: [[BOUND_PTR_ARITH3:%.*]] = getelementptr i8, ptr [[END]], i64 -4 -// WITHOUT-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH3]], align 4, !tbaa [[TBAA2]] -// WITHOUT-NEXT: ret void // CHECK-LABEL: define dso_local void @bar( // CHECK-SAME: ptr noundef writeonly captures(address) [[START:%.*]], ptr noundef writeonly captures(address) [[END:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] @@ -55,27 +46,38 @@ void foo(int *__ended_by(end) start, int * end) { // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP_NOT]], [[CMP22_NOT]], !annotation [[META2]] // CHECK-NEXT: [[CMP33_NOT:%.*]] = icmp ugt ptr [[START]], [[BOUND_PTR_ARITH]], !annotation [[META2]] // CHECK-NEXT: [[OR_COND52:%.*]] = or i1 [[CMP33_NOT]], [[OR_COND]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[OR_COND52]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[OR_COND52]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA3]] -// CHECK-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH3]], align 4, !tbaa [[TBAA3]] +// CHECK-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA4]] +// CHECK-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH3]], align 4, !tbaa [[TBAA4]] // CHECK-NEXT: ret void // +// WITHOUT-LABEL: define dso_local void @bar( +// WITHOUT-SAME: ptr noundef writeonly captures(none) initializes((4, 8)) [[START:%.*]], ptr noundef writeonly captures(none) initializes((-4, 0)) [[END:%.*]]) local_unnamed_addr #[[ATTR0]] { +// WITHOUT-NEXT: [[ENTRY:.*:]] +// WITHOUT-NEXT: [[BOUND_PTR_ARITH:%.*]] = getelementptr i8, ptr [[START]], i64 4 +// WITHOUT-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA2]] +// WITHOUT-NEXT: [[BOUND_PTR_ARITH3:%.*]] = getelementptr i8, ptr [[END]], i64 -4 +// WITHOUT-NEXT: store i32 0, ptr [[BOUND_PTR_ARITH3]], align 4, !tbaa [[TBAA2]] +// WITHOUT-NEXT: ret void +// void bar(int *__ended_by(end) start, int * end) { *(start = start+1) = 0; *(end = end-1) = 0; } +//. +// CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048577, i32 1048575} +// CHECK: [[TBAA4]] = !{[[META5:![0-9]+]], [[META5]], i64 0} +// CHECK: [[META5]] = !{!"int", [[META6:![0-9]+]], i64 0} +// CHECK: [[META6]] = !{!"omnipotent char", [[META7:![0-9]+]], i64 0} +// CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} +//. // WITHOUT: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0} // WITHOUT: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0} // WITHOUT: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0} // WITHOUT: [[META5]] = !{!"Simple C/C++ TBAA"} //. -// CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[TBAA3]] = !{[[META4:![0-9]+]], [[META4]], i64 0} -// CHECK: [[META4]] = !{!"int", [[META5:![0-9]+]], i64 0} -// CHECK: [[META5]] = !{!"omnipotent char", [[META6:![0-9]+]], i64 0} -// CHECK: [[META6]] = !{!"Simple C/C++ TBAA"} -//. diff --git a/clang/test/BoundsSafety/CodeGen/ended_by_const_param-O2.c b/clang/test/BoundsSafety/CodeGen/ended_by_const_param-O2.c index acc066930bad1..802d4e717a0b0 100644 --- a/clang/test/BoundsSafety/CodeGen/ended_by_const_param-O2.c +++ b/clang/test/BoundsSafety/CodeGen/ended_by_const_param-O2.c @@ -36,7 +36,7 @@ void good(void) { // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ugt ptr [[BOUND_PTR_ARITH]], [[UPPER]], !annotation [[META2:![0-9]+]] // CHECK-NEXT: [[CMP28_NOT:%.*]] = icmp ugt ptr [[ARR]], [[BOUND_PTR_ARITH]], !annotation [[META2]] // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP_NOT]], [[CMP28_NOT]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR6:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -60,7 +60,7 @@ void oob_upper(void) { // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ugt ptr [[BOUND_PTR_ARITH]], [[UPPER]], !annotation [[META2]] // CHECK-NEXT: [[CMP28_NOT:%.*]] = icmp ugt ptr [[ARR]], [[BOUND_PTR_ARITH]], !annotation [[META2]] // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP_NOT]], [[CMP28_NOT]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -86,4 +86,5 @@ void oob_order(void) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048577, i32 1048575} //. diff --git a/clang/test/BoundsSafety/CodeGen/ended_by_const_param.c b/clang/test/BoundsSafety/CodeGen/ended_by_const_param.c index f22eb4aa0a744..b88fda158c69e 100644 --- a/clang/test/BoundsSafety/CodeGen/ended_by_const_param.c +++ b/clang/test/BoundsSafety/CodeGen/ended_by_const_param.c @@ -86,7 +86,7 @@ void foo(int * const __ended_by(end) start, int* const end) { // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] // CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_PTR7]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -114,4 +114,5 @@ void bar(void) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} //. diff --git a/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O0-disabled-lb-check.c b/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O0-disabled-lb-check.c index a4bab6b9ae460..4ca821d0543fe 100644 --- a/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O0-disabled-lb-check.c +++ b/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O0-disabled-lb-check.c @@ -63,7 +63,7 @@ void ended_by(const char *__ended_by(end) start, const char *end); // CHECK-NEXT: [[WIDE_PTR_LB_ADDR10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8, !annotation [[META2]] // CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_PTR7]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -185,7 +185,7 @@ void pass_const_size_arr_in_bounds(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP25:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP30]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP25]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP25]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -293,7 +293,7 @@ void pass_const_size_arr_start_oob(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP16:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP28]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -349,13 +349,13 @@ void pass_const_size_arr_end_oob(void) { // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP]], i32 0, i32 1 // CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8 -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP]], i32 0, i32 2, !annotation [[META3:![0-9]+]] -// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META3]] -// CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP]], i32 0, i32 2, !annotation [[META4:![0-9]+]] +// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: // CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.indexable", ptr [[ILOCAL]], i32 0, i32 0 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR]], ptr [[TMP4]], align 8 @@ -433,7 +433,7 @@ void pass_const_size_arr_end_oob(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP22:%.*]] = phi i1 [ false, %[[CONT]] ], [ [[CMP41]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP22]], label %[[CONT43:.*]], label %[[TRAP42:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP22]], label %[[CONT43:.*]], label %[[TRAP42:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP42]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -535,7 +535,7 @@ void pass_explicit_indexable(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP26]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -635,7 +635,7 @@ void pass_explict_bidi_indexable(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP13:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP26]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP13]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -751,7 +751,7 @@ void pass_ended_by(char* __ended_by(end) start, const char* end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP21:%.*]] = phi i1 [ false, %[[ENTRY]] ], [ [[CMP28]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP21]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -778,5 +778,6 @@ void pass_counted_by(char* __counted_by(count) start, int count) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[META3]] = !{!"bounds-safety-check-bidi-to-indexable-ptr-ge-lower-bound"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-check-bidi-to-indexable-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O0.c b/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O0.c index 4312d1d2429e0..91206805062cc 100644 --- a/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O0.c +++ b/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O0.c @@ -67,7 +67,7 @@ void ended_by(const char *__ended_by(end) start, const char *end); // CHECK-NEXT: [[WIDE_PTR_LB_ADDR12:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP7]], i32 0, i32 2, !annotation [[META2]] // CHECK-NEXT: [[WIDE_PTR_LB13:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR12]], align 8, !annotation [[META2]] // CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_PTR9]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[CMP]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -212,7 +212,7 @@ void pass_const_size_arr_in_bounds(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP26:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP47]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP26]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP26]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -343,7 +343,7 @@ void pass_const_size_arr_start_oob(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP17:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP45]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -402,13 +402,13 @@ void pass_const_size_arr_end_oob(void) { // CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8 // CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP]], i32 0, i32 1 // CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8 -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP]], i32 0, i32 2, !annotation [[META3:![0-9]+]] -// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META3]] -// CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META3]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP]], i32 0, i32 2, !annotation [[META4:![0-9]+]] +// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META4]] +// CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_LB]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT]]: // CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.indexable", ptr [[ILOCAL]], i32 0, i32 0 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR]], ptr [[TMP4]], align 8 @@ -515,7 +515,7 @@ void pass_const_size_arr_end_oob(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP26:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[CONT]] ], [ [[CMP61]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP26]], label %[[CONT63:.*]], label %[[TRAP62:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP26]], label %[[CONT63:.*]], label %[[TRAP62:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP62]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -640,7 +640,7 @@ void pass_explicit_indexable(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP14:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP43]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -763,7 +763,7 @@ void pass_explict_bidi_indexable(void) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP14:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP43]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -902,7 +902,7 @@ void pass_ended_by(char* __ended_by(end) start, const char* end) { // CHECK-NEXT: br label %[[LAND_END]], !annotation [[META2]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP22:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[CMP45]], %[[LAND_RHS]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP22]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP22]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -929,5 +929,6 @@ void pass_counted_by(char* __counted_by(count) start, int count) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[META3]] = !{!"bounds-safety-check-bidi-to-indexable-ptr-ge-lower-bound"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-check-bidi-to-indexable-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O2-disabled-lb-check.c b/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O2-disabled-lb-check.c index 73406d4e739aa..868e721ed07a3 100644 --- a/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O2-disabled-lb-check.c +++ b/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O2-disabled-lb-check.c @@ -31,7 +31,7 @@ void pass_const_size_arr_in_bounds(void) { // CHECK-NEXT: [[UPPER:%.*]] = getelementptr inbounds nuw i8, ptr [[LOCAL]], i64 10 // CHECK-NEXT: [[BOUND_PTR_ARITH:%.*]] = getelementptr i8, ptr [[LOCAL]], i64 -2 // CHECK-NEXT: [[CMP30_NOT:%.*]] = icmp ugt ptr [[BOUND_PTR_ARITH]], [[UPPER]], !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[CMP30_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[CMP30_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -55,7 +55,7 @@ void pass_const_size_arr_start_oob(void) { // CHECK-NEXT: [[CMP_NOT:%.*]] = icmp ugt ptr [[BOUND_PTR_ARITH]], [[UPPER]], !annotation {{![0-9]+}} // CHECK-NEXT: [[CMP28_NOT:%.*]] = icmp ugt ptr [[LOCAL]], [[BOUND_PTR_ARITH]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP_NOT]], [[CMP28_NOT]], !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -105,7 +105,7 @@ void pass_explict_bidi_indexable(void) { // CHECK-SAME: ptr noundef [[START:%.*]], ptr noundef [[END:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP26_NOT:%.*]] = icmp ugt ptr [[START]], [[END]], !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[CMP26_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[CMP26_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -121,7 +121,7 @@ void pass_ended_by(char* __ended_by(end) start, const char* end) { // CHECK-SAME: ptr noundef [[START:%.*]], i32 noundef [[COUNT:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[CMP28_NOT:%.*]] = icmp slt i32 [[COUNT]], 0, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[CMP28_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[CMP28_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} diff --git a/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O2.c b/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O2.c index 64eeeafe0b03d..2f532537d2a81 100644 --- a/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O2.c +++ b/clang/test/BoundsSafety/CodeGen/ended_by_param_in_call-O2.c @@ -33,7 +33,7 @@ void pass_const_size_arr_in_bounds(void) { // CHECK-NEXT: [[CMP30_NOT:%.*]] = icmp ugt ptr [[BOUND_PTR_ARITH]], [[UPPER]], !annotation {{![0-9]+}} // CHECK-NEXT: [[CMP47_NOT:%.*]] = icmp ugt ptr [[LOCAL]], [[BOUND_PTR_ARITH]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP30_NOT]], [[CMP47_NOT]], !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP:.*]], label %[[CONT:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} diff --git a/clang/test/BoundsSafety/CodeGen/flexible-array-member-bidi-O0.c b/clang/test/BoundsSafety/CodeGen/flexible-array-member-bidi-O0.c index 7900b20540355..a07426ec74c97 100644 --- a/clang/test/BoundsSafety/CodeGen/flexible-array-member-bidi-O0.c +++ b/clang/test/BoundsSafety/CodeGen/flexible-array-member-bidi-O0.c @@ -28,16 +28,16 @@ struct Simple { // CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // CHECK-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_SIMPLE:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META2:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META3:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP1]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT2]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SIMPLE]], ptr [[WIDE_PTR_PTR]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 4 @@ -64,16 +64,16 @@ void simple_no_flexbase_update(struct Simple * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // CHECK-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_SIMPLE:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP1]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT2]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SIMPLE]], ptr [[WIDE_PTR_PTR]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 4 @@ -100,16 +100,16 @@ void simple_flexbase_update(struct Simple * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // CHECK-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_SIMPLE:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP1]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT2]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SIMPLE]], ptr [[WIDE_PTR_PTR]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 4 @@ -152,59 +152,59 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[P2]], i32 0, i32 2 // CHECK-NEXT: store ptr [[CALL]], ptr [[TMP2]], align 8 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[P2]], i64 24, i1 false) -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4:![0-9]+]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5:![0-9]+]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META5]] // CHECK: [[LAND_LHS_TRUE]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META4]] -// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META5]] +// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META5]] // CHECK: [[LAND_RHS27]]: -// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META5]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_RHS]] ], [ true, %[[LAND_RHS27]] ] -// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_END28]]: -// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[P]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP29]], i32 0, i32 0 @@ -215,16 +215,16 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[WIDE_PTR_LB35:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR34]], align 8 // CHECK-NEXT: [[TMP5:%.*]] = getelementptr [[STRUCT_SHARED:%.*]], ptr [[WIDE_PTR_PTR31]], i64 1 // CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[TMP5]], [[WIDE_PTR_UB33]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT37:.*]], label %[[TRAP36:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT37:.*]], label %[[TRAP36:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP36]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT37]]: -// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB35]], [[WIDE_PTR_PTR31]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT39:.*]], label %[[TRAP38:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB35]], [[WIDE_PTR_PTR31]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT39:.*]], label %[[TRAP38:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP38]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT39]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR31]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 8 @@ -244,16 +244,16 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[WIDE_PTR_LB53:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR52]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i64 1 // CHECK-NEXT: [[TMP9:%.*]] = icmp ule ptr [[TMP8]], [[WIDE_PTR_UB51]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP54]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT55]]: -// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT57]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i32 0, i32 1 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR42]], ptr [[PTR]], align 8 @@ -288,59 +288,59 @@ void shared_no_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: store ptr [[ADD_PTR]], ptr [[TMP1]], align 8 // CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP]], i32 0, i32 2 // CHECK-NEXT: store ptr [[CALL]], ptr [[TMP2]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META5]] // CHECK: [[LAND_LHS_TRUE]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META4]] -// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META5]] +// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META5]] // CHECK: [[LAND_RHS27]]: -// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META5]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_RHS]] ], [ true, %[[LAND_RHS27]] ] -// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_END28]]: -// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 0 @@ -358,16 +358,16 @@ void shared_no_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB42:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR41]], align 8 // CHECK-NEXT: [[TMP5:%.*]] = getelementptr [[STRUCT_SHARED:%.*]], ptr [[WIDE_PTR_PTR38]], i64 1 // CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[TMP5]], [[WIDE_PTR_UB40]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT44:.*]], label %[[TRAP43:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT44:.*]], label %[[TRAP43:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP43]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT44]]: -// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB42]], [[WIDE_PTR_PTR38]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT46:.*]], label %[[TRAP45:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB42]], [[WIDE_PTR_PTR38]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT46:.*]], label %[[TRAP45:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP45]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT46]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR38]], i32 0, i32 1 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR31]], ptr [[PTR]], align 8 @@ -380,16 +380,16 @@ void shared_no_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB53:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR52]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i64 1 // CHECK-NEXT: [[TMP9:%.*]] = icmp ule ptr [[TMP8]], [[WIDE_PTR_UB51]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP54]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT55]]: -// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT57]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 8 @@ -427,59 +427,59 @@ void shared_no_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: store ptr [[CALL]], ptr [[TMP2]], align 8 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[P2]], ptr align 8 [[P]], i64 24, i1 false) // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[P3]], i64 24, i1 false) -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META5]] // CHECK: [[LAND_LHS_TRUE]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META4]] -// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META5]] +// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META5]] // CHECK: [[LAND_RHS27]]: -// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META5]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_RHS]] ], [ true, %[[LAND_RHS27]] ] -// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_END28]]: -// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 0 @@ -497,16 +497,16 @@ void shared_no_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB42:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR41]], align 8 // CHECK-NEXT: [[TMP5:%.*]] = getelementptr [[STRUCT_SHARED:%.*]], ptr [[WIDE_PTR_PTR38]], i64 1 // CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[TMP5]], [[WIDE_PTR_UB40]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT44:.*]], label %[[TRAP43:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT44:.*]], label %[[TRAP43:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP43]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT44]]: -// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB42]], [[WIDE_PTR_PTR38]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT46:.*]], label %[[TRAP45:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB42]], [[WIDE_PTR_PTR38]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT46:.*]], label %[[TRAP45:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP45]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT46]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR38]], i32 0, i32 1 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR31]], ptr [[PTR]], align 8 @@ -519,16 +519,16 @@ void shared_no_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB53:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR52]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i64 1 // CHECK-NEXT: [[TMP9:%.*]] = icmp ule ptr [[TMP8]], [[WIDE_PTR_UB51]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP54]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT55]]: -// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT57]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 8 @@ -568,59 +568,59 @@ void shared_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: store ptr [[CALL]], ptr [[TMP2]], align 8 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[P2]], ptr align 8 [[P]], i64 24, i1 false) // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[P3]], i64 24, i1 false) -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META5]] // CHECK: [[LAND_LHS_TRUE]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META4]] -// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META5]] +// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META5]] // CHECK: [[LAND_RHS27]]: -// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META5]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_RHS]] ], [ true, %[[LAND_RHS27]] ] -// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_END28]]: -// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[P2]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP29]], i32 0, i32 0 @@ -631,16 +631,16 @@ void shared_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB35:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR34]], align 8 // CHECK-NEXT: [[TMP5:%.*]] = getelementptr [[STRUCT_SHARED:%.*]], ptr [[WIDE_PTR_PTR31]], i64 1 // CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[TMP5]], [[WIDE_PTR_UB33]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT37:.*]], label %[[TRAP36:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT37:.*]], label %[[TRAP36:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP36]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT37]]: -// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB35]], [[WIDE_PTR_PTR31]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT39:.*]], label %[[TRAP38:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB35]], [[WIDE_PTR_PTR31]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT39:.*]], label %[[TRAP38:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP38]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT39]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR31]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 8 @@ -660,16 +660,16 @@ void shared_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB53:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR52]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i64 1 // CHECK-NEXT: [[TMP9:%.*]] = icmp ule ptr [[TMP8]], [[WIDE_PTR_UB51]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP54]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT55]]: -// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT57]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i32 0, i32 1 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR42]], ptr [[PTR]], align 8 @@ -708,59 +708,59 @@ void shared_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: store ptr [[CALL]], ptr [[TMP2]], align 8 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[P]], ptr align 8 [[P]], i64 24, i1 false) // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[P2]], i64 24, i1 false) -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META5]] // CHECK: [[LAND_LHS_TRUE]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META4]] -// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META5]] +// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META5]] // CHECK: [[LAND_RHS27]]: -// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META5]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_RHS]] ], [ true, %[[LAND_RHS27]] ] -// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_END28]]: -// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 0 @@ -778,16 +778,16 @@ void shared_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB42:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR41]], align 8 // CHECK-NEXT: [[TMP5:%.*]] = getelementptr [[STRUCT_SHARED:%.*]], ptr [[WIDE_PTR_PTR38]], i64 1 // CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[TMP5]], [[WIDE_PTR_UB40]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT44:.*]], label %[[TRAP43:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT44:.*]], label %[[TRAP43:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP43]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT44]]: -// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB42]], [[WIDE_PTR_PTR38]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT46:.*]], label %[[TRAP45:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB42]], [[WIDE_PTR_PTR38]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT46:.*]], label %[[TRAP45:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP45]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT46]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR38]], i32 0, i32 1 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR31]], ptr [[PTR]], align 8 @@ -800,16 +800,16 @@ void shared_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB53:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR52]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i64 1 // CHECK-NEXT: [[TMP9:%.*]] = icmp ule ptr [[TMP8]], [[WIDE_PTR_UB51]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP54]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT55]]: -// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT57]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 8 @@ -848,59 +848,59 @@ void shared_flexbase_self_assign(struct Shared * __bidi_indexable p) { // CHECK-NEXT: store ptr [[CALL]], ptr [[TMP2]], align 8 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[P]], ptr align 8 [[P]], i64 24, i1 false) // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP]], ptr align 8 [[P2]], i64 24, i1 false) -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP1]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP1]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP2]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR3:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP2]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB4:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR3]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR]], [[WIDE_PTR_UB4]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END28:.*]], !annotation [[META5]] // CHECK: [[LAND_LHS_TRUE]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP5]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR6:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP5]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB7:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR6]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP8]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR9:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR10:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR9]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR11:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB12:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR11]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR13:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP8]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB14:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR13]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB7]], [[WIDE_PTR_PTR10]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP15]], label %[[LAND_RHS:.*]], label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META4]] -// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB18:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR17]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP19]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR20:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR21:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR20]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR22:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB23:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR22]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP19]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB25:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR24]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB18]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR21]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META5]] +// CHECK-NEXT: [[CMP26:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP26]], label %[[LAND_RHS27:.*]], label %[[LAND_END:.*]], !annotation [[META5]] // CHECK: [[LAND_RHS27]]: -// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META5]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_RHS]] ], [ true, %[[LAND_RHS27]] ] -// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END28]], !annotation [[META5]] // CHECK: [[LAND_END28]]: -// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP4:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP3]], %[[LAND_END]] ], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[P]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP29]], i32 0, i32 0 @@ -911,16 +911,16 @@ void shared_flexbase_self_assign(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB35:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR34]], align 8 // CHECK-NEXT: [[TMP5:%.*]] = getelementptr [[STRUCT_SHARED:%.*]], ptr [[WIDE_PTR_PTR31]], i64 1 // CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[TMP5]], [[WIDE_PTR_UB33]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT37:.*]], label %[[TRAP36:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT37:.*]], label %[[TRAP36:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP36]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT37]]: -// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB35]], [[WIDE_PTR_PTR31]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT39:.*]], label %[[TRAP38:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[WIDE_PTR_LB35]], [[WIDE_PTR_PTR31]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT39:.*]], label %[[TRAP38:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP38]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT39]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR31]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 8 @@ -940,16 +940,16 @@ void shared_flexbase_self_assign(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB53:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR52]], align 8 // CHECK-NEXT: [[TMP8:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i64 1 // CHECK-NEXT: [[TMP9:%.*]] = icmp ule ptr [[TMP8]], [[WIDE_PTR_UB51]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP9]], label %[[CONT55:.*]], label %[[TRAP54:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP54]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT55]]: -// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP10:%.*]] = icmp ule ptr [[WIDE_PTR_LB53]], [[WIDE_PTR_PTR49]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT57:.*]], label %[[TRAP56:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP56]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT57]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR49]], i32 0, i32 1 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR42]], ptr [[PTR]], align 8 @@ -991,16 +991,16 @@ void shared_flexbase_self_assign_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // CHECK-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_SHARED:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP3]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT4]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR]], i32 0, i32 0 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[LEN]], align 8 @@ -1013,16 +1013,16 @@ void shared_flexbase_self_assign_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8 // CHECK-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR7]], i64 1 // CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[TMP4]], [[WIDE_PTR_UB9]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT13:.*]], label %[[TRAP12:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT13:.*]], label %[[TRAP12:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP12]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT13]]: -// CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[WIDE_PTR_LB11]], [[WIDE_PTR_PTR7]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT15:.*]], label %[[TRAP14:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[WIDE_PTR_LB11]], [[WIDE_PTR_PTR7]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT15:.*]], label %[[TRAP14:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP14]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT15]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR7]], i32 0, i32 1 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[PTR]], align 8 @@ -1034,59 +1034,59 @@ void shared_flexbase_self_assign_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: store ptr [[ADD_PTR]], ptr [[TMP9]], align 8 // CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP10]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR18:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR17]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR19:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB20:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR19]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR21:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB22:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR21]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP23]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP23]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB25:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR24]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR18]], [[WIDE_PTR_UB25]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END49:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR18:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR17]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR19:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB20:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR19]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR21:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB22:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR21]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP23]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP23]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB25:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR24]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR18]], [[WIDE_PTR_UB25]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END49:.*]], !annotation [[META5]] // CHECK: [[LAND_LHS_TRUE]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP26]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR27:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP26]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB28:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR27]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR31:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR30]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR32:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB33:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR32]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR34:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB35:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR34]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP36:%.*]] = icmp ule ptr [[WIDE_PTR_LB28]], [[WIDE_PTR_PTR31]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP36]], label %[[LAND_RHS:.*]], label %[[LAND_END49]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP26]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR27:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP26]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB28:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR27]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR31:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR30]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR32:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB33:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR32]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR34:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB35:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR34]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP36:%.*]] = icmp ule ptr [[WIDE_PTR_LB28]], [[WIDE_PTR_PTR31]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP36]], label %[[LAND_RHS:.*]], label %[[LAND_END49]], !annotation [[META5]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP37]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR38:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP37]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB39:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR38]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP40]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR42:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR41]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR43:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB44:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR43]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR45:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB46:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR45]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB39]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR42]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META4]] -// CHECK-NEXT: [[CMP47:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP47]], label %[[LAND_RHS48:.*]], label %[[LAND_END:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP37]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR38:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP37]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB39:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR38]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP40]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR42:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR41]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR43:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB44:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR43]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR45:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB46:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR45]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB39]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR42]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META5]] +// CHECK-NEXT: [[CMP47:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP47]], label %[[LAND_RHS48:.*]], label %[[LAND_END:.*]], !annotation [[META5]] // CHECK: [[LAND_RHS48]]: -// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META5]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP11:%.*]] = phi i1 [ false, %[[LAND_RHS]] ], [ true, %[[LAND_RHS48]] ] -// CHECK-NEXT: br label %[[LAND_END49]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END49]], !annotation [[META5]] // CHECK: [[LAND_END49]]: -// CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[CONT15]] ], [ [[TMP11]], %[[LAND_END]] ], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT51:.*]], label %[[TRAP50:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[CONT15]] ], [ [[TMP11]], %[[LAND_END]] ], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT51:.*]], label %[[TRAP50:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP50]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT51]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP52]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR53:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP52]], i32 0, i32 0 @@ -1104,16 +1104,16 @@ void shared_flexbase_self_assign_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB65:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR64]], align 8 // CHECK-NEXT: [[TMP13:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR61]], i64 1 // CHECK-NEXT: [[TMP14:%.*]] = icmp ule ptr [[TMP13]], [[WIDE_PTR_UB63]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT67:.*]], label %[[TRAP66:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT67:.*]], label %[[TRAP66:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP66]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT67]]: -// CHECK-NEXT: [[TMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB65]], [[WIDE_PTR_PTR61]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT69:.*]], label %[[TRAP68:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB65]], [[WIDE_PTR_PTR61]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT69:.*]], label %[[TRAP68:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP68]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT69]]: // CHECK-NEXT: [[PTR70:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR61]], i32 0, i32 1 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR54]], ptr [[PTR70]], align 8 @@ -1126,16 +1126,16 @@ void shared_flexbase_self_assign_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB77:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR76]], align 8 // CHECK-NEXT: [[TMP16:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR73]], i64 1 // CHECK-NEXT: [[TMP17:%.*]] = icmp ule ptr [[TMP16]], [[WIDE_PTR_UB75]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT79:.*]], label %[[TRAP78:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT79:.*]], label %[[TRAP78:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP78]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT79]]: -// CHECK-NEXT: [[TMP18:%.*]] = icmp ule ptr [[WIDE_PTR_LB77]], [[WIDE_PTR_PTR73]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP18]], label %[[CONT81:.*]], label %[[TRAP80:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP18:%.*]] = icmp ule ptr [[WIDE_PTR_LB77]], [[WIDE_PTR_PTR73]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP18]], label %[[CONT81:.*]], label %[[TRAP80:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP80]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT81]]: // CHECK-NEXT: [[LEN82:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR73]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN82]], align 8 @@ -1176,16 +1176,16 @@ void shared_flexbase_self_assign_fr(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // CHECK-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_SHARED:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT4:.*]], label %[[TRAP3:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP3]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT4]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR]], i32 0, i32 0 // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[LEN]], align 8 @@ -1198,16 +1198,16 @@ void shared_flexbase_self_assign_fr(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB11:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR10]], align 8 // CHECK-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR7]], i64 1 // CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[TMP4]], [[WIDE_PTR_UB9]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT13:.*]], label %[[TRAP12:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT13:.*]], label %[[TRAP12:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP12]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT13]]: -// CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[WIDE_PTR_LB11]], [[WIDE_PTR_PTR7]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT15:.*]], label %[[TRAP14:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[WIDE_PTR_LB11]], [[WIDE_PTR_PTR7]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT15:.*]], label %[[TRAP14:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP14]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT15]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR7]], i32 0, i32 1 // CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[PTR]], align 8 @@ -1219,59 +1219,59 @@ void shared_flexbase_self_assign_fr(struct Shared * __bidi_indexable p) { // CHECK-NEXT: store ptr [[ADD_PTR]], ptr [[TMP9]], align 8 // CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP]], i32 0, i32 2 // CHECK-NEXT: store ptr [[TMP7]], ptr [[TMP10]], align 8 -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR18:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR17]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR19:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB20:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR19]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR21:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB22:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR21]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP23]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP23]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB25:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR24]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR18]], [[WIDE_PTR_UB25]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END49:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP16]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR17:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR18:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR17]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR19:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB20:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR19]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR21:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP16]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB22:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR21]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP23]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR24:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP23]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB25:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR24]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP:%.*]] = icmp ule ptr [[WIDE_PTR_PTR18]], [[WIDE_PTR_UB25]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP]], label %[[LAND_LHS_TRUE:.*]], label %[[LAND_END49:.*]], !annotation [[META5]] // CHECK: [[LAND_LHS_TRUE]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP26]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR27:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP26]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB28:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR27]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR31:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR30]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR32:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB33:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR32]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR34:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB35:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR34]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[CMP36:%.*]] = icmp ule ptr [[WIDE_PTR_LB28]], [[WIDE_PTR_PTR31]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP36]], label %[[LAND_RHS:.*]], label %[[LAND_END49]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP26]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR27:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP26]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB28:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR27]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP29]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR30:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR31:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR30]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR32:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB33:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR32]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR34:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP29]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB35:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR34]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[CMP36:%.*]] = icmp ule ptr [[WIDE_PTR_LB28]], [[WIDE_PTR_PTR31]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP36]], label %[[LAND_RHS:.*]], label %[[LAND_END49]], !annotation [[META5]] // CHECK: [[LAND_RHS]]: -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP37]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR38:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP37]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB39:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR38]], align 8, !annotation [[META4]] -// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP40]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 0, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_PTR42:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR41]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB_ADDR43:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 1, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_UB44:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR43]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB_ADDR45:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 2, !annotation [[META4]] -// CHECK-NEXT: [[WIDE_PTR_LB46:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR45]], align 8, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB39]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR42]] to i64, !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META4]] -// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META4]] -// CHECK-NEXT: [[CMP47:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[CMP47]], label %[[LAND_RHS48:.*]], label %[[LAND_END:.*]], !annotation [[META4]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP37]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR38:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP37]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB39:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR38]], align 8, !annotation [[META5]] +// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP40]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false), !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR_ADDR41:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 0, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_PTR42:%.*]] = load ptr, ptr [[WIDE_PTR_PTR_ADDR41]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB_ADDR43:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 1, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_UB44:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR43]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB_ADDR45:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.1", ptr [[AGG_TEMP40]], i32 0, i32 2, !annotation [[META5]] +// CHECK-NEXT: [[WIDE_PTR_LB46:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR45]], align 8, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_UB39]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[WIDE_PTR_PTR42]] to i64, !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]], !annotation [[META5]] +// CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 4, !annotation [[META5]] +// CHECK-NEXT: [[CMP47:%.*]] = icmp sle i64 11, [[SUB_PTR_DIV]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[CMP47]], label %[[LAND_RHS48:.*]], label %[[LAND_END:.*]], !annotation [[META5]] // CHECK: [[LAND_RHS48]]: -// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END]], !annotation [[META5]] // CHECK: [[LAND_END]]: // CHECK-NEXT: [[TMP11:%.*]] = phi i1 [ false, %[[LAND_RHS]] ], [ true, %[[LAND_RHS48]] ] -// CHECK-NEXT: br label %[[LAND_END49]], !annotation [[META4]] +// CHECK-NEXT: br label %[[LAND_END49]], !annotation [[META5]] // CHECK: [[LAND_END49]]: -// CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[CONT15]] ], [ [[TMP11]], %[[LAND_END]] ], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT51:.*]], label %[[TRAP50:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[CONT15]] ], [ [[TMP11]], %[[LAND_END]] ], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT51:.*]], label %[[TRAP50:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP50]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT51]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP52]], ptr align 8 [[P]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR53:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP52]], i32 0, i32 0 @@ -1282,16 +1282,16 @@ void shared_flexbase_self_assign_fr(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB58:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR57]], align 8 // CHECK-NEXT: [[TMP13:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR54]], i64 1 // CHECK-NEXT: [[TMP14:%.*]] = icmp ule ptr [[TMP13]], [[WIDE_PTR_UB56]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT60:.*]], label %[[TRAP59:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT60:.*]], label %[[TRAP59:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP59]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT60]]: -// CHECK-NEXT: [[TMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB58]], [[WIDE_PTR_PTR54]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB58]], [[WIDE_PTR_PTR54]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP61]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT62]]: // CHECK-NEXT: [[LEN63:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR54]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN63]], align 8 @@ -1311,16 +1311,16 @@ void shared_flexbase_self_assign_fr(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB77:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR76]], align 8 // CHECK-NEXT: [[TMP16:%.*]] = getelementptr [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR73]], i64 1 // CHECK-NEXT: [[TMP17:%.*]] = icmp ule ptr [[TMP16]], [[WIDE_PTR_UB75]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT79:.*]], label %[[TRAP78:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT79:.*]], label %[[TRAP78:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP78]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT79]]: -// CHECK-NEXT: [[TMP18:%.*]] = icmp ule ptr [[WIDE_PTR_LB77]], [[WIDE_PTR_PTR73]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP18]], label %[[CONT81:.*]], label %[[TRAP80:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP18:%.*]] = icmp ule ptr [[WIDE_PTR_LB77]], [[WIDE_PTR_PTR73]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP18]], label %[[CONT81:.*]], label %[[TRAP80:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP80]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT81]]: // CHECK-NEXT: [[PTR82:%.*]] = getelementptr inbounds nuw [[STRUCT_SHARED]], ptr [[WIDE_PTR_PTR73]], i32 0, i32 1 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR66]], ptr [[PTR82]], align 8 @@ -1353,16 +1353,16 @@ struct Double { // CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // CHECK-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_DOUBLE:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP1]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT2]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_DOUBLE]], ptr [[WIDE_PTR_PTR]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 4 @@ -1388,16 +1388,16 @@ void double_no_flexbase_update_once(struct Double * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // CHECK-NEXT: [[TMP0:%.*]] = getelementptr [[STRUCT_DOUBLE:%.*]], ptr [[WIDE_PTR_PTR]], i64 1 // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[WIDE_PTR_UB]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[WIDE_PTR_LB]], [[WIDE_PTR_PTR]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP1]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT2]]: // CHECK-NEXT: [[LEN:%.*]] = getelementptr inbounds nuw [[STRUCT_DOUBLE]], ptr [[WIDE_PTR_PTR]], i32 0, i32 0 // CHECK-NEXT: store i32 11, ptr [[LEN]], align 4 @@ -1410,16 +1410,16 @@ void double_no_flexbase_update_once(struct Double * __bidi_indexable p) { // CHECK-NEXT: [[WIDE_PTR_LB9:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR8]], align 8 // CHECK-NEXT: [[TMP3:%.*]] = getelementptr [[STRUCT_DOUBLE]], ptr [[WIDE_PTR_PTR5]], i64 1 // CHECK-NEXT: [[TMP4:%.*]] = icmp ule ptr [[TMP3]], [[WIDE_PTR_UB7]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT11:.*]], label %[[TRAP10:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP4]], label %[[CONT11:.*]], label %[[TRAP10:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP10]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT11]]: -// CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[WIDE_PTR_LB9]], [[WIDE_PTR_PTR5]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT13:.*]], label %[[TRAP12:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[WIDE_PTR_LB9]], [[WIDE_PTR_PTR5]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT13:.*]], label %[[TRAP12:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP12]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT13]]: // CHECK-NEXT: [[LEN2:%.*]] = getelementptr inbounds nuw [[STRUCT_DOUBLE]], ptr [[WIDE_PTR_PTR5]], i32 0, i32 1 // CHECK-NEXT: store i32 11, ptr [[LEN2]], align 4 @@ -1431,6 +1431,7 @@ void double_no_flexbase_update_both(struct Double * __bidi_indexable p) { } //. // CHECK: [[META2]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META3]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[META4]] = !{!"bounds-safety-generic"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[META5]] = !{!"bounds-safety-generic"} //. diff --git a/clang/test/BoundsSafety/CodeGen/flexible-array-member-bidi-O2.c b/clang/test/BoundsSafety/CodeGen/flexible-array-member-bidi-O2.c index 826fd3ca02289..5d3aec0e34dd7 100644 --- a/clang/test/BoundsSafety/CodeGen/flexible-array-member-bidi-O2.c +++ b/clang/test/BoundsSafety/CodeGen/flexible-array-member-bidi-O2.c @@ -25,7 +25,7 @@ struct Simple { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP_SROA_3_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -49,7 +49,7 @@ void simple_no_flexbase_update(struct Simple * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[P2_SROA_4_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[P2_SROA_5_0_COPYLOAD]], [[P2_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -74,7 +74,7 @@ void simple_flexbase_update(struct Simple * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP_SROA_3_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -107,7 +107,7 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP29_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP29_SROA_3_0_COPYLOAD]], [[AGG_TEMP29_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT37:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT37:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -119,7 +119,7 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[TMP4:%.*]] = icmp ule ptr [[TMP3]], [[AGG_TEMP45_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[AGG_TEMP29_SROA_3_0_COPYLOAD]], [[AGG_TEMP45_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND54:%.*]] = select i1 [[TMP4]], i1 [[TMP5]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND54]], label %[[CONT53:.*]], label %[[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND54]], label %[[CONT53:.*]], label %[[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[CONT53]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TEMP45_SROA_0_0_COPYLOAD]], i64 8 // CHECK-NEXT: store ptr [[CALL]], ptr [[PTR]], align 8, !tbaa {{![0-9]+}} @@ -144,7 +144,7 @@ void shared_no_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP36_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP36_SROA_3_0_COPYLOAD]], [[AGG_TEMP36_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT44:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT44:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -157,7 +157,7 @@ void shared_no_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP4:%.*]] = icmp ule ptr [[TMP3]], [[AGG_TEMP45_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[AGG_TEMP36_SROA_3_0_COPYLOAD]], [[AGG_TEMP45_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND54:%.*]] = select i1 [[TMP4]], i1 [[TMP5]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND54]], label %[[CONT53:.*]], label %[[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND54]], label %[[CONT53:.*]], label %[[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[CONT53]]: // CHECK-NEXT: store i32 11, ptr [[AGG_TEMP45_SROA_0_0_COPYLOAD]], align 8, !tbaa {{![0-9]+}} // CHECK-NEXT: ret void @@ -180,7 +180,7 @@ void shared_no_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[P2_SROA_5_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[P2_SROA_7_0_COPYLOAD]], [[P2_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT44:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT44:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -210,7 +210,7 @@ void shared_flexbase_update(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[P2_SROA_5_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[P2_SROA_7_0_COPYLOAD]], [[P2_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT37:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT37:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -240,7 +240,7 @@ void shared_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP36_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP36_SROA_3_0_COPYLOAD]], [[AGG_TEMP36_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT44:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT44:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -253,7 +253,7 @@ void shared_flexbase_update_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP4:%.*]] = icmp ule ptr [[TMP3]], [[AGG_TEMP45_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[AGG_TEMP36_SROA_3_0_COPYLOAD]], [[AGG_TEMP45_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND54:%.*]] = select i1 [[TMP4]], i1 [[TMP5]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND54]], label %[[CONT53:.*]], label %[[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND54]], label %[[CONT53:.*]], label %[[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[CONT53]]: // CHECK-NEXT: store i32 11, ptr [[AGG_TEMP45_SROA_0_0_COPYLOAD]], align 8, !tbaa {{![0-9]+}} // CHECK-NEXT: ret void @@ -278,7 +278,7 @@ void shared_flexbase_self_assign(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP29_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP29_SROA_3_0_COPYLOAD]], [[AGG_TEMP29_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT37:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT37:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -290,7 +290,7 @@ void shared_flexbase_self_assign(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP4:%.*]] = icmp ule ptr [[TMP3]], [[AGG_TEMP45_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[AGG_TEMP29_SROA_3_0_COPYLOAD]], [[AGG_TEMP45_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND54:%.*]] = select i1 [[TMP4]], i1 [[TMP5]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND54]], label %[[CONT53:.*]], label %[[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND54]], label %[[CONT53:.*]], label %[[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[CONT53]]: // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TEMP45_SROA_0_0_COPYLOAD]], i64 8 // CHECK-NEXT: store ptr [[CALL]], ptr [[PTR]], align 8, !tbaa {{![0-9]+}} @@ -315,14 +315,14 @@ void shared_flexbase_self_assign_reverse(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP1_SROA_3_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP1_SROA_5_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT12:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT12:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} // CHECK: [[CONT12]]: // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], align 8, !tbaa {{![0-9]+}} // CHECK-NEXT: [[OR_COND78:%.*]] = icmp sgt i32 [[TMP3]], 10, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND78]], label %[[CONT73:.*]], label %[[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND78]], label %[[CONT73:.*]], label %[[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[CONT73]]: // CHECK-NEXT: store i32 11, ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], align 8, !tbaa {{![0-9]+}} // CHECK-NEXT: ret void @@ -345,7 +345,7 @@ void shared_flexbase_self_assign_fr(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP1_SROA_3_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP1_SROA_5_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT12:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT12:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -354,7 +354,7 @@ void shared_flexbase_self_assign_fr(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], i64 8 // CHECK-NEXT: [[TMP4:%.*]] = load ptr, ptr [[PTR]], align 8, !tbaa {{![0-9]+}} // CHECK-NEXT: [[OR_COND78:%.*]] = icmp sgt i32 [[TMP3]], 10, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND78]], label %[[CONT56:.*]], label %[[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND78]], label %[[CONT56:.*]], label %[[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[CONT56]]: // CHECK-NEXT: store i32 11, ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], align 8, !tbaa {{![0-9]+}} // CHECK-NEXT: [[AGG_TEMP65_SROA_0_0_COPYLOAD:%.*]] = load ptr, ptr [[P]], align 8 @@ -363,7 +363,7 @@ void shared_flexbase_self_assign_fr(struct Shared * __bidi_indexable p) { // CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[TMP5]], [[AGG_TEMP65_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP7:%.*]] = icmp ule ptr [[AGG_TEMP1_SROA_5_0_COPYLOAD]], [[AGG_TEMP65_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND77:%.*]] = select i1 [[TMP6]], i1 [[TMP7]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND77]], label %[[CONT73:.*]], label %[[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND77]], label %[[CONT73:.*]], label %[[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[CONT73]]: // CHECK-NEXT: [[PTR74:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TEMP65_SROA_0_0_COPYLOAD]], i64 8 // CHECK-NEXT: store ptr [[TMP4]], ptr [[PTR74]], align 8, !tbaa {{![0-9]+}} @@ -393,7 +393,7 @@ struct Double { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP_SROA_3_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -417,7 +417,7 @@ void double_no_flexbase_update_once(struct Double * __bidi_indexable p) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP_SROA_3_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label %[[CONT1:.*]], label %[[TRAP:.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[TRAP]]: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -429,7 +429,7 @@ void double_no_flexbase_update_once(struct Double * __bidi_indexable p) { // CHECK-NEXT: [[TMP4:%.*]] = icmp ule ptr [[TMP3]], [[AGG_TEMP2_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[AGG_TEMP_SROA_3_0_COPYLOAD]], [[AGG_TEMP2_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND11:%.*]] = select i1 [[TMP4]], i1 [[TMP5]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND11]], label %[[CONT10:.*]], label %[[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND11]], label %[[CONT10:.*]], label %[[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: [[CONT10]]: // CHECK-NEXT: [[LEN2:%.*]] = getelementptr inbounds nuw i8, ptr [[AGG_TEMP2_SROA_0_0_COPYLOAD]], i64 4 // CHECK-NEXT: store i32 11, ptr [[LEN2]], align 4, !tbaa {{![0-9]+}} diff --git a/clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O0.c b/clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O0.c index a162d50ad1d16..ce6b0ddd7d76d 100644 --- a/clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O0.c +++ b/clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O0.c @@ -114,7 +114,7 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: br label %[[LAND_END39]], !annotation [[META2]] // CHECK: [[LAND_END39]]: // CHECK-NEXT: [[TMP10:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP9]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -126,15 +126,15 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[WIDE_PTR_UB45:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR44]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR46:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP41]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB47:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR46]], align 8 -// CHECK-NEXT: [[FLEX_BASE_NULL_CHECK:%.*]] = icmp ne ptr [[WIDE_PTR_PTR43]], null, !annotation [[META3:![0-9]+]] -// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK]], label %[[FLEX_BASE_NONNULL:.*]], label %[[CONT68:.*]], !annotation [[META3]] +// CHECK-NEXT: [[FLEX_BASE_NULL_CHECK:%.*]] = icmp ne ptr [[WIDE_PTR_PTR43]], null, !annotation [[META4:![0-9]+]] +// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK]], label %[[FLEX_BASE_NONNULL:.*]], label %[[CONT68:.*]], !annotation [[META4]] // CHECK: [[FLEX_BASE_NONNULL]]: // CHECK-NEXT: [[TMP11:%.*]] = getelementptr [[STRUCT_OUTER:%.*]], ptr [[WIDE_PTR_PTR43]], i64 1 -// CHECK-NEXT: [[TMP12:%.*]] = icmp ule ptr [[WIDE_PTR_PTR43]], [[TMP11]], !annotation [[META4:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT49:.*]], label %[[TRAP48:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP12:%.*]] = icmp ule ptr [[WIDE_PTR_PTR43]], [[TMP11]], !annotation [[META5:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT49:.*]], label %[[TRAP48:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP48]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT49]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP50]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR51:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP50]], i32 0, i32 0 @@ -144,48 +144,48 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[WIDE_PTR_LB_ADDR55:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP50]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB56:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR55]], align 8 // CHECK-NEXT: [[TMP13:%.*]] = getelementptr [[STRUCT_OUTER]], ptr [[WIDE_PTR_PTR52]], i64 1 -// CHECK-NEXT: [[TMP14:%.*]] = icmp ule ptr [[TMP13]], [[WIDE_PTR_UB54]], !annotation [[META5:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT58:.*]], label %[[TRAP57:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP14:%.*]] = icmp ule ptr [[TMP13]], [[WIDE_PTR_UB54]], !annotation [[META6:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT58:.*]], label %[[TRAP57:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP57]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT58]]: -// CHECK-NEXT: [[TMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB56]], [[WIDE_PTR_PTR52]], !annotation [[META6:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT60:.*]], label %[[TRAP59:.*]], !annotation [[META6]] -// CHECK: [[TRAP59]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT58]]: +// CHECK-NEXT: [[TMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB56]], [[WIDE_PTR_PTR52]], !annotation [[META7:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT60:.*]], label %[[TRAP59:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP59]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT60]]: // CHECK-NEXT: [[FAM:%.*]] = getelementptr inbounds nuw [[STRUCT_OUTER]], ptr [[WIDE_PTR_PTR52]], i32 0, i32 1 // CHECK-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [0 x i32], ptr [[FAM]], i64 0, i64 0 -// CHECK-NEXT: [[FLEX_COUNT_MINUS:%.*]] = icmp sle i32 0, [[TMP8]], !annotation [[META7:![0-9]+]] -// CHECK-NEXT: br i1 [[FLEX_COUNT_MINUS]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !annotation [[META7]] +// CHECK-NEXT: [[FLEX_COUNT_MINUS:%.*]] = icmp sle i32 0, [[TMP8]], !annotation [[META8:![0-9]+]] +// CHECK-NEXT: br i1 [[FLEX_COUNT_MINUS]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !prof [[PROF3]], !annotation [[META8]] // CHECK: [[TRAP61]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] -// CHECK-NEXT: unreachable, !annotation [[META7]] -// CHECK: [[CONT62]]: -// CHECK-NEXT: [[TMP16:%.*]] = icmp ule ptr [[ARRAYDECAY]], [[WIDE_PTR_UB45]], !annotation [[META8:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT64:.*]], label %[[TRAP63:.*]], !annotation [[META8]] -// CHECK: [[TRAP63]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META8]] // CHECK-NEXT: unreachable, !annotation [[META8]] -// CHECK: [[CONT64]]: -// CHECK-NEXT: [[TMP17:%.*]] = icmp uge ptr [[WIDE_PTR_PTR43]], [[WIDE_PTR_LB47]], !annotation [[META9:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT66:.*]], label %[[TRAP65:.*]], !annotation [[META9]] -// CHECK: [[TRAP65]]: +// CHECK: [[CONT62]]: +// CHECK-NEXT: [[TMP16:%.*]] = icmp ule ptr [[ARRAYDECAY]], [[WIDE_PTR_UB45]], !annotation [[META9:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT64:.*]], label %[[TRAP63:.*]], !prof [[PROF3]], !annotation [[META9]] +// CHECK: [[TRAP63]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META9]] // CHECK-NEXT: unreachable, !annotation [[META9]] -// CHECK: [[CONT66]]: -// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[WIDE_PTR_UB45]] to i64, !annotation [[META10:![0-9]+]] -// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[ARRAYDECAY]] to i64, !annotation [[META10]] -// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META10]] -// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = sdiv exact i64 [[FLEX_AVAIL_COUNT]], 4, !annotation [[META10]] -// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext i32 [[TMP8]] to i64, !annotation [[META10]] -// CHECK-NEXT: [[FLEX_COUNT_CHECK:%.*]] = icmp ule i64 [[FLEX_COUNT_INTPTR]], [[FLEX_AVAIL_COUNT_DIV]], !annotation [[META10]] -// CHECK-NEXT: br i1 [[FLEX_COUNT_CHECK]], label %[[CONT68]], label %[[TRAP67:.*]], !annotation [[META10]] -// CHECK: [[TRAP67]]: +// CHECK: [[CONT64]]: +// CHECK-NEXT: [[TMP17:%.*]] = icmp uge ptr [[WIDE_PTR_PTR43]], [[WIDE_PTR_LB47]], !annotation [[META10:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT66:.*]], label %[[TRAP65:.*]], !prof [[PROF3]], !annotation [[META10]] +// CHECK: [[TRAP65]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META10]] // CHECK-NEXT: unreachable, !annotation [[META10]] +// CHECK: [[CONT66]]: +// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[WIDE_PTR_UB45]] to i64, !annotation [[META11:![0-9]+]] +// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[ARRAYDECAY]] to i64, !annotation [[META11]] +// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META11]] +// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = sdiv exact i64 [[FLEX_AVAIL_COUNT]], 4, !annotation [[META11]] +// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext i32 [[TMP8]] to i64, !annotation [[META11]] +// CHECK-NEXT: [[FLEX_COUNT_CHECK:%.*]] = icmp ule i64 [[FLEX_COUNT_INTPTR]], [[FLEX_AVAIL_COUNT_DIV]], !annotation [[META11]] +// CHECK-NEXT: br i1 [[FLEX_COUNT_CHECK]], label %[[CONT68]], label %[[TRAP67:.*]], !prof [[PROF3]], !annotation [[META11]] +// CHECK: [[TRAP67]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META11]] +// CHECK-NEXT: unreachable, !annotation [[META11]] // CHECK: [[CONT68]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP40]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR69:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP40]], i32 0, i32 0 @@ -194,20 +194,20 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[WIDE_PTR_UB72:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR71]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR73:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP40]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB74:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR73]], align 8 -// CHECK-NEXT: [[TMP18:%.*]] = icmp ne ptr [[WIDE_PTR_PTR70]], null, !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP18]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT78:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP18:%.*]] = icmp ne ptr [[WIDE_PTR_PTR70]], null, !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP18]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT78:.*]], !annotation [[META4]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP19:%.*]] = icmp ult ptr [[WIDE_PTR_PTR70]], [[WIDE_PTR_UB72]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP19]], label %[[CONT76:.*]], label %[[TRAP75:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP19:%.*]] = icmp ult ptr [[WIDE_PTR_PTR70]], [[WIDE_PTR_UB72]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP19]], label %[[CONT76:.*]], label %[[TRAP75:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP75]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT76]]: -// CHECK-NEXT: [[TMP20:%.*]] = icmp uge ptr [[WIDE_PTR_PTR70]], [[WIDE_PTR_LB74]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT78]], label %[[TRAP77:.*]], !annotation [[META6]] -// CHECK: [[TRAP77]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT76]]: +// CHECK-NEXT: [[TMP20:%.*]] = icmp uge ptr [[WIDE_PTR_PTR70]], [[WIDE_PTR_LB74]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT78]], label %[[TRAP77:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP77]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT78]]: // CHECK-NEXT: store ptr [[WIDE_PTR_PTR70]], ptr [[P]], align 8 // CHECK-NEXT: [[TMP21:%.*]] = load ptr, ptr [[P]], align 8 @@ -226,8 +226,8 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_INNER]], ptr [[HDR87]], i32 0, i32 0 // CHECK-NEXT: store ptr [[WIDE_PTR_PTR82]], ptr [[PTR]], align 8 // CHECK-NEXT: [[TMP23:%.*]] = load ptr, ptr [[P]], align 8 -// CHECK-NEXT: [[TMP24:%.*]] = icmp ne ptr [[TMP23]], null, !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP24]], label %[[BOUNDSCHECK_NOTNULL89:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP24:%.*]] = icmp ne ptr [[TMP23]], null, !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP24]], label %[[BOUNDSCHECK_NOTNULL89:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] // CHECK: [[BOUNDSCHECK_NOTNULL89]]: // CHECK-NEXT: [[FAM90:%.*]] = getelementptr inbounds nuw [[STRUCT_OUTER]], ptr [[TMP23]], i32 0, i32 1 // CHECK-NEXT: [[ARRAYDECAY91:%.*]] = getelementptr inbounds [0 x i32], ptr [[FAM90]], i64 0, i64 0 @@ -258,20 +258,20 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[WIDE_PTR_UB99:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR98]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR100:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP88]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB101:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR100]], align 8 -// CHECK-NEXT: [[TMP32:%.*]] = icmp ne ptr [[WIDE_PTR_PTR97]], null, !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP32]], label %[[BOUNDSCHECK_NOTNULL102:.*]], label %[[CONT106:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP32:%.*]] = icmp ne ptr [[WIDE_PTR_PTR97]], null, !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP32]], label %[[BOUNDSCHECK_NOTNULL102:.*]], label %[[CONT106:.*]], !annotation [[META4]] // CHECK: [[BOUNDSCHECK_NOTNULL102]]: -// CHECK-NEXT: [[TMP33:%.*]] = icmp ult ptr [[WIDE_PTR_PTR97]], [[WIDE_PTR_UB99]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP33]], label %[[CONT104:.*]], label %[[TRAP103:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP33:%.*]] = icmp ult ptr [[WIDE_PTR_PTR97]], [[WIDE_PTR_UB99]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP33]], label %[[CONT104:.*]], label %[[TRAP103:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP103]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT104]]: -// CHECK-NEXT: [[TMP34:%.*]] = icmp uge ptr [[WIDE_PTR_PTR97]], [[WIDE_PTR_LB101]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP34]], label %[[CONT106]], label %[[TRAP105:.*]], !annotation [[META6]] -// CHECK: [[TRAP105]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT104]]: +// CHECK-NEXT: [[TMP34:%.*]] = icmp uge ptr [[WIDE_PTR_PTR97]], [[WIDE_PTR_LB101]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP34]], label %[[CONT106]], label %[[TRAP105:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP105]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT106]]: // CHECK-NEXT: ret ptr [[WIDE_PTR_PTR97]] // @@ -380,7 +380,7 @@ struct Outer *foo(int len) { // CHECK-NEXT: br label %[[LAND_END39]], !annotation [[META2]] // CHECK: [[LAND_END39]]: // CHECK-NEXT: [[TMP10:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP9]], %[[LAND_END]] ], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP10]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] @@ -392,15 +392,15 @@ struct Outer *foo(int len) { // CHECK-NEXT: [[WIDE_PTR_UB45:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR44]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR46:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP41]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB47:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR46]], align 8 -// CHECK-NEXT: [[FLEX_BASE_NULL_CHECK:%.*]] = icmp ne ptr [[WIDE_PTR_PTR43]], null, !annotation [[META3]] -// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK]], label %[[FLEX_BASE_NONNULL:.*]], label %[[CONT68:.*]], !annotation [[META3]] +// CHECK-NEXT: [[FLEX_BASE_NULL_CHECK:%.*]] = icmp ne ptr [[WIDE_PTR_PTR43]], null, !annotation [[META4]] +// CHECK-NEXT: br i1 [[FLEX_BASE_NULL_CHECK]], label %[[FLEX_BASE_NONNULL:.*]], label %[[CONT68:.*]], !annotation [[META4]] // CHECK: [[FLEX_BASE_NONNULL]]: // CHECK-NEXT: [[TMP11:%.*]] = getelementptr [[STRUCT_OUTER:%.*]], ptr [[WIDE_PTR_PTR43]], i64 1 -// CHECK-NEXT: [[TMP12:%.*]] = icmp ule ptr [[WIDE_PTR_PTR43]], [[TMP11]], !annotation [[META4]] -// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT49:.*]], label %[[TRAP48:.*]], !annotation [[META4]] +// CHECK-NEXT: [[TMP12:%.*]] = icmp ule ptr [[WIDE_PTR_PTR43]], [[TMP11]], !annotation [[META5]] +// CHECK-NEXT: br i1 [[TMP12]], label %[[CONT49:.*]], label %[[TRAP48:.*]], !prof [[PROF3]], !annotation [[META5]] // CHECK: [[TRAP48]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META4]] -// CHECK-NEXT: unreachable, !annotation [[META4]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] +// CHECK-NEXT: unreachable, !annotation [[META5]] // CHECK: [[CONT49]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP50]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR51:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP50]], i32 0, i32 0 @@ -410,48 +410,48 @@ struct Outer *foo(int len) { // CHECK-NEXT: [[WIDE_PTR_LB_ADDR55:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP50]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB56:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR55]], align 8 // CHECK-NEXT: [[TMP13:%.*]] = getelementptr [[STRUCT_OUTER]], ptr [[WIDE_PTR_PTR52]], i64 1 -// CHECK-NEXT: [[TMP14:%.*]] = icmp ule ptr [[TMP13]], [[WIDE_PTR_UB54]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT58:.*]], label %[[TRAP57:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP14:%.*]] = icmp ule ptr [[TMP13]], [[WIDE_PTR_UB54]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP14]], label %[[CONT58:.*]], label %[[TRAP57:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP57]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT58]]: -// CHECK-NEXT: [[TMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB56]], [[WIDE_PTR_PTR52]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT60:.*]], label %[[TRAP59:.*]], !annotation [[META6]] -// CHECK: [[TRAP59]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT58]]: +// CHECK-NEXT: [[TMP15:%.*]] = icmp ule ptr [[WIDE_PTR_LB56]], [[WIDE_PTR_PTR52]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP15]], label %[[CONT60:.*]], label %[[TRAP59:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP59]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT60]]: // CHECK-NEXT: [[FAM:%.*]] = getelementptr inbounds nuw [[STRUCT_OUTER]], ptr [[WIDE_PTR_PTR52]], i32 0, i32 1 // CHECK-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [0 x i32], ptr [[FAM]], i64 0, i64 0 -// CHECK-NEXT: [[FLEX_COUNT_MINUS:%.*]] = icmp sle i32 0, [[TMP8]], !annotation [[META7]] -// CHECK-NEXT: br i1 [[FLEX_COUNT_MINUS]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !annotation [[META7]] +// CHECK-NEXT: [[FLEX_COUNT_MINUS:%.*]] = icmp sle i32 0, [[TMP8]], !annotation [[META8]] +// CHECK-NEXT: br i1 [[FLEX_COUNT_MINUS]], label %[[CONT62:.*]], label %[[TRAP61:.*]], !prof [[PROF3]], !annotation [[META8]] // CHECK: [[TRAP61]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] -// CHECK-NEXT: unreachable, !annotation [[META7]] -// CHECK: [[CONT62]]: -// CHECK-NEXT: [[TMP16:%.*]] = icmp ule ptr [[ARRAYDECAY]], [[WIDE_PTR_UB45]], !annotation [[META8]] -// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT64:.*]], label %[[TRAP63:.*]], !annotation [[META8]] -// CHECK: [[TRAP63]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META8]] // CHECK-NEXT: unreachable, !annotation [[META8]] -// CHECK: [[CONT64]]: -// CHECK-NEXT: [[TMP17:%.*]] = icmp uge ptr [[WIDE_PTR_PTR43]], [[WIDE_PTR_LB47]], !annotation [[META9]] -// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT66:.*]], label %[[TRAP65:.*]], !annotation [[META9]] -// CHECK: [[TRAP65]]: +// CHECK: [[CONT62]]: +// CHECK-NEXT: [[TMP16:%.*]] = icmp ule ptr [[ARRAYDECAY]], [[WIDE_PTR_UB45]], !annotation [[META9]] +// CHECK-NEXT: br i1 [[TMP16]], label %[[CONT64:.*]], label %[[TRAP63:.*]], !prof [[PROF3]], !annotation [[META9]] +// CHECK: [[TRAP63]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META9]] // CHECK-NEXT: unreachable, !annotation [[META9]] -// CHECK: [[CONT66]]: -// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[WIDE_PTR_UB45]] to i64, !annotation [[META10]] -// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[ARRAYDECAY]] to i64, !annotation [[META10]] -// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META10]] -// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = sdiv exact i64 [[FLEX_AVAIL_COUNT]], 4, !annotation [[META10]] -// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext i32 [[TMP8]] to i64, !annotation [[META10]] -// CHECK-NEXT: [[FLEX_COUNT_CHECK:%.*]] = icmp ule i64 [[FLEX_COUNT_INTPTR]], [[FLEX_AVAIL_COUNT_DIV]], !annotation [[META10]] -// CHECK-NEXT: br i1 [[FLEX_COUNT_CHECK]], label %[[CONT68]], label %[[TRAP67:.*]], !annotation [[META10]] -// CHECK: [[TRAP67]]: +// CHECK: [[CONT64]]: +// CHECK-NEXT: [[TMP17:%.*]] = icmp uge ptr [[WIDE_PTR_PTR43]], [[WIDE_PTR_LB47]], !annotation [[META10]] +// CHECK-NEXT: br i1 [[TMP17]], label %[[CONT66:.*]], label %[[TRAP65:.*]], !prof [[PROF3]], !annotation [[META10]] +// CHECK: [[TRAP65]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META10]] // CHECK-NEXT: unreachable, !annotation [[META10]] +// CHECK: [[CONT66]]: +// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[WIDE_PTR_UB45]] to i64, !annotation [[META11]] +// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[ARRAYDECAY]] to i64, !annotation [[META11]] +// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META11]] +// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = sdiv exact i64 [[FLEX_AVAIL_COUNT]], 4, !annotation [[META11]] +// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext i32 [[TMP8]] to i64, !annotation [[META11]] +// CHECK-NEXT: [[FLEX_COUNT_CHECK:%.*]] = icmp ule i64 [[FLEX_COUNT_INTPTR]], [[FLEX_AVAIL_COUNT_DIV]], !annotation [[META11]] +// CHECK-NEXT: br i1 [[FLEX_COUNT_CHECK]], label %[[CONT68]], label %[[TRAP67:.*]], !prof [[PROF3]], !annotation [[META11]] +// CHECK: [[TRAP67]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META11]] +// CHECK-NEXT: unreachable, !annotation [[META11]] // CHECK: [[CONT68]]: // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP40]], ptr align 8 [[AGG_TEMP]], i64 24, i1 false) // CHECK-NEXT: [[WIDE_PTR_PTR_ADDR69:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP40]], i32 0, i32 0 @@ -460,20 +460,20 @@ struct Outer *foo(int len) { // CHECK-NEXT: [[WIDE_PTR_UB72:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR71]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR73:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP40]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB74:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR73]], align 8 -// CHECK-NEXT: [[TMP18:%.*]] = icmp ne ptr [[WIDE_PTR_PTR70]], null, !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP18]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT78:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP18:%.*]] = icmp ne ptr [[WIDE_PTR_PTR70]], null, !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP18]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[CONT78:.*]], !annotation [[META4]] // CHECK: [[BOUNDSCHECK_NOTNULL]]: -// CHECK-NEXT: [[TMP19:%.*]] = icmp ult ptr [[WIDE_PTR_PTR70]], [[WIDE_PTR_UB72]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP19]], label %[[CONT76:.*]], label %[[TRAP75:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP19:%.*]] = icmp ult ptr [[WIDE_PTR_PTR70]], [[WIDE_PTR_UB72]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP19]], label %[[CONT76:.*]], label %[[TRAP75:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP75]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT76]]: -// CHECK-NEXT: [[TMP20:%.*]] = icmp uge ptr [[WIDE_PTR_PTR70]], [[WIDE_PTR_LB74]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT78]], label %[[TRAP77:.*]], !annotation [[META6]] -// CHECK: [[TRAP77]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT76]]: +// CHECK-NEXT: [[TMP20:%.*]] = icmp uge ptr [[WIDE_PTR_PTR70]], [[WIDE_PTR_LB74]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP20]], label %[[CONT78]], label %[[TRAP77:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP77]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT78]]: // CHECK-NEXT: store ptr [[WIDE_PTR_PTR70]], ptr [[P]], align 8 // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[AGG_TEMP79]], ptr align 8 [[AGG_TEMP4]], i64 24, i1 false) @@ -492,8 +492,8 @@ struct Outer *foo(int len) { // CHECK-NEXT: [[LEN87:%.*]] = getelementptr inbounds nuw [[STRUCT_INNER]], ptr [[HDR86]], i32 0, i32 1 // CHECK-NEXT: store i32 [[TMP8]], ptr [[LEN87]], align 8 // CHECK-NEXT: [[TMP23:%.*]] = load ptr, ptr [[P]], align 8 -// CHECK-NEXT: [[TMP24:%.*]] = icmp ne ptr [[TMP23]], null, !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP24]], label %[[BOUNDSCHECK_NOTNULL89:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP24:%.*]] = icmp ne ptr [[TMP23]], null, !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP24]], label %[[BOUNDSCHECK_NOTNULL89:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] // CHECK: [[BOUNDSCHECK_NOTNULL89]]: // CHECK-NEXT: [[FAM90:%.*]] = getelementptr inbounds nuw [[STRUCT_OUTER]], ptr [[TMP23]], i32 0, i32 1 // CHECK-NEXT: [[ARRAYDECAY91:%.*]] = getelementptr inbounds [0 x i32], ptr [[FAM90]], i64 0, i64 0 @@ -524,20 +524,20 @@ struct Outer *foo(int len) { // CHECK-NEXT: [[WIDE_PTR_UB99:%.*]] = load ptr, ptr [[WIDE_PTR_UB_ADDR98]], align 8 // CHECK-NEXT: [[WIDE_PTR_LB_ADDR100:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable.0", ptr [[AGG_TEMP88]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB101:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR100]], align 8 -// CHECK-NEXT: [[TMP32:%.*]] = icmp ne ptr [[WIDE_PTR_PTR97]], null, !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP32]], label %[[BOUNDSCHECK_NOTNULL102:.*]], label %[[CONT106:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP32:%.*]] = icmp ne ptr [[WIDE_PTR_PTR97]], null, !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP32]], label %[[BOUNDSCHECK_NOTNULL102:.*]], label %[[CONT106:.*]], !annotation [[META4]] // CHECK: [[BOUNDSCHECK_NOTNULL102]]: -// CHECK-NEXT: [[TMP33:%.*]] = icmp ult ptr [[WIDE_PTR_PTR97]], [[WIDE_PTR_UB99]], !annotation [[META5]] -// CHECK-NEXT: br i1 [[TMP33]], label %[[CONT104:.*]], label %[[TRAP103:.*]], !annotation [[META5]] +// CHECK-NEXT: [[TMP33:%.*]] = icmp ult ptr [[WIDE_PTR_PTR97]], [[WIDE_PTR_UB99]], !annotation [[META6]] +// CHECK-NEXT: br i1 [[TMP33]], label %[[CONT104:.*]], label %[[TRAP103:.*]], !prof [[PROF3]], !annotation [[META6]] // CHECK: [[TRAP103]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META5]] -// CHECK-NEXT: unreachable, !annotation [[META5]] -// CHECK: [[CONT104]]: -// CHECK-NEXT: [[TMP34:%.*]] = icmp uge ptr [[WIDE_PTR_PTR97]], [[WIDE_PTR_LB101]], !annotation [[META6]] -// CHECK-NEXT: br i1 [[TMP34]], label %[[CONT106]], label %[[TRAP105:.*]], !annotation [[META6]] -// CHECK: [[TRAP105]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META6]] // CHECK-NEXT: unreachable, !annotation [[META6]] +// CHECK: [[CONT104]]: +// CHECK-NEXT: [[TMP34:%.*]] = icmp uge ptr [[WIDE_PTR_PTR97]], [[WIDE_PTR_LB101]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[TMP34]], label %[[CONT106]], label %[[TRAP105:.*]], !prof [[PROF3]], !annotation [[META7]] +// CHECK: [[TRAP105]]: +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META7]] +// CHECK-NEXT: unreachable, !annotation [[META7]] // CHECK: [[CONT106]]: // CHECK-NEXT: ret ptr [[WIDE_PTR_PTR97]] // @@ -550,12 +550,13 @@ struct Outer *foo2(int len) { } //. // CHECK: [[META2]] = !{!"bounds-safety-generic"} -// CHECK: [[META3]] = !{!"bounds-safety-check-ptr-neq-null"} -// CHECK: [[META4]] = !{!"bounds-safety-check-one-past-end-overflow"} -// CHECK: [[META5]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[META7]] = !{!"bounds-safety-check-count-negative"} -// CHECK: [[META8]] = !{!"bounds-safety-check-flexible-count-gt-bounds", !"bounds-safety-check-ptr-le-upper-bound"} -// CHECK: [[META9]] = !{!"bounds-safety-check-flexible-count-gt-bounds", !"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[META10]] = !{!"bounds-safety-check-flexible-count-gt-bounds"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} +// CHECK: [[META5]] = !{!"bounds-safety-check-one-past-end-overflow"} +// CHECK: [[META6]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} +// CHECK: [[META7]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[META8]] = !{!"bounds-safety-check-count-negative"} +// CHECK: [[META9]] = !{!"bounds-safety-check-flexible-count-gt-bounds", !"bounds-safety-check-ptr-le-upper-bound"} +// CHECK: [[META10]] = !{!"bounds-safety-check-flexible-count-gt-bounds", !"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[META11]] = !{!"bounds-safety-check-flexible-count-gt-bounds"} //. diff --git a/clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O2.c b/clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O2.c index 7bc331d67fcba..c33dced3d3f09 100644 --- a/clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O2.c +++ b/clang/test/BoundsSafety/CodeGen/flexible-array-member-shared-decls-O2.c @@ -41,21 +41,21 @@ int * __counted_by(len) baz(int len); // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[CALL1]], [[TMP1]], !annotation [[META7:![0-9]+]] // CHECK-NEXT: [[DOTNOT106:%.*]] = icmp ugt ptr [[TMP1]], [[ADD_PTR3]], !annotation [[META8:![0-9]+]] // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[DOTNOT]], i1 true, i1 [[DOTNOT106]], !annotation [[META8]] -// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT60:.*]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT60:.*]], !prof [[PROF9:![0-9]+]], !annotation [[META7]] // CHECK: [[CONT60]]: -// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[ADD_PTR3]] to i64, !annotation [[META9:![0-9]+]] -// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[TMP1]] to i64, !annotation [[META9]] -// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META9]] -// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[FLEX_AVAIL_COUNT]], 2, !annotation [[META9]] -// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext nneg i32 [[LEN]] to i64, !annotation [[META9]] -// CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT:%.*]] = icmp uge i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], !annotation [[META9]] +// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[ADD_PTR3]] to i64, !annotation [[META10:![0-9]+]] +// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[TMP1]] to i64, !annotation [[META10]] +// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META10]] +// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[FLEX_AVAIL_COUNT]], 2, !annotation [[META10]] +// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext nneg i32 [[LEN]] to i64, !annotation [[META10]] +// CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT:%.*]] = icmp uge i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], !annotation [[META10]] // CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[CALL1]], [[ADD_PTR3]], !annotation [[META8]] // CHECK-NEXT: [[OR_COND108:%.*]] = select i1 [[FLEX_COUNT_CHECK_NOT]], i1 [[TMP2]], i1 false, !annotation [[META6]] -// CHECK-NEXT: br i1 [[OR_COND108]], label %[[CONT69]], label %[[TRAP]], !annotation [[META9]] +// CHECK-NEXT: br i1 [[OR_COND108]], label %[[CONT69]], label %[[TRAP]], !prof [[PROF11:![0-9]+]], !annotation [[META10]] // CHECK: [[CONT69]]: // CHECK-NEXT: [[LEN70:%.*]] = getelementptr inbounds nuw i8, ptr [[CALL1]], i64 8 -// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN70]], align 8, !tbaa [[TBAA10:![0-9]+]] -// CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA17:![0-9]+]] +// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN70]], align 8, !tbaa [[TBAA12:![0-9]+]] +// CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA19:![0-9]+]] // CHECK-NEXT: ret ptr [[CALL1]] // struct Outer *foo(int len) { @@ -90,21 +90,21 @@ struct Outer *foo(int len) { // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[CALL1]], [[TMP1]], !annotation [[META7]] // CHECK-NEXT: [[DOTNOT106:%.*]] = icmp ugt ptr [[TMP1]], [[ADD_PTR3]], !annotation [[META8]] // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[DOTNOT]], i1 true, i1 [[DOTNOT106]], !annotation [[META8]] -// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT60:.*]], !annotation [[META7]] +// CHECK-NEXT: br i1 [[OR_COND]], label %[[TRAP]], label %[[CONT60:.*]], !prof [[PROF9]], !annotation [[META7]] // CHECK: [[CONT60]]: -// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[ADD_PTR3]] to i64, !annotation [[META9]] -// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[TMP1]] to i64, !annotation [[META9]] -// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META9]] -// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[FLEX_AVAIL_COUNT]], 2, !annotation [[META9]] -// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext nneg i32 [[LEN]] to i64, !annotation [[META9]] -// CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT:%.*]] = icmp uge i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], !annotation [[META9]] +// CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[ADD_PTR3]] to i64, !annotation [[META10]] +// CHECK-NEXT: [[FAM_INTPTR:%.*]] = ptrtoint ptr [[TMP1]] to i64, !annotation [[META10]] +// CHECK-NEXT: [[FLEX_AVAIL_COUNT:%.*]] = sub nuw i64 [[UPPER_INTPTR]], [[FAM_INTPTR]], !annotation [[META10]] +// CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[FLEX_AVAIL_COUNT]], 2, !annotation [[META10]] +// CHECK-NEXT: [[FLEX_COUNT_INTPTR:%.*]] = zext nneg i32 [[LEN]] to i64, !annotation [[META10]] +// CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT:%.*]] = icmp uge i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], !annotation [[META10]] // CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[CALL1]], [[ADD_PTR3]], !annotation [[META8]] // CHECK-NEXT: [[OR_COND108:%.*]] = select i1 [[FLEX_COUNT_CHECK_NOT]], i1 [[TMP2]], i1 false, !annotation [[META6]] -// CHECK-NEXT: br i1 [[OR_COND108]], label %[[CONT69]], label %[[TRAP]], !annotation [[META9]] +// CHECK-NEXT: br i1 [[OR_COND108]], label %[[CONT69]], label %[[TRAP]], !prof [[PROF11]], !annotation [[META10]] // CHECK: [[CONT69]]: -// CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA17]] +// CHECK-NEXT: store ptr [[CALL]], ptr [[CALL1]], align 8, !tbaa [[TBAA19]] // CHECK-NEXT: [[LEN78:%.*]] = getelementptr inbounds nuw i8, ptr [[CALL1]], i64 8 -// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN78]], align 8, !tbaa [[TBAA10]] +// CHECK-NEXT: store i32 [[LEN]], ptr [[LEN78]], align 8, !tbaa [[TBAA12]] // CHECK-NEXT: ret ptr [[CALL1]] // struct Outer *foo2(int len) { @@ -122,13 +122,15 @@ struct Outer *foo2(int len) { // CHECK: [[META6]] = !{!"bounds-safety-check-ptr-neq-null"} // CHECK: [[META7]] = !{!"bounds-safety-check-one-past-end-overflow"} // CHECK: [[META8]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META9]] = !{!"bounds-safety-check-flexible-count-gt-bounds"} -// CHECK: [[TBAA10]] = !{[[META11:![0-9]+]], [[META16:![0-9]+]], i64 8} -// CHECK: [[META11]] = !{!"Inner", [[META12:![0-9]+]], i64 0, [[META16]], i64 8} -// CHECK: [[META12]] = !{!"p1 int", [[META13:![0-9]+]], i64 0} -// CHECK: [[META13]] = !{!"any pointer", [[META14:![0-9]+]], i64 0} -// CHECK: [[META14]] = !{!"omnipotent char", [[META15:![0-9]+]], i64 0} -// CHECK: [[META15]] = !{!"Simple C/C++ TBAA"} -// CHECK: [[META16]] = !{!"int", [[META14]], i64 0} -// CHECK: [[TBAA17]] = !{[[META11]], [[META12]], i64 0} +// CHECK: [[PROF9]] = !{!"branch_weights", i32 12286, i32 -12288} +// CHECK: [[META10]] = !{!"bounds-safety-check-flexible-count-gt-bounds"} +// CHECK: [[PROF11]] = !{!"branch_weights", i32 -8193, i32 8190} +// CHECK: [[TBAA12]] = !{[[META13:![0-9]+]], [[META18:![0-9]+]], i64 8} +// CHECK: [[META13]] = !{!"Inner", [[META14:![0-9]+]], i64 0, [[META18]], i64 8} +// CHECK: [[META14]] = !{!"p1 int", [[META15:![0-9]+]], i64 0} +// CHECK: [[META15]] = !{!"any pointer", [[META16:![0-9]+]], i64 0} +// CHECK: [[META16]] = !{!"omnipotent char", [[META17:![0-9]+]], i64 0} +// CHECK: [[META17]] = !{!"Simple C/C++ TBAA"} +// CHECK: [[META18]] = !{!"int", [[META16]], i64 0} +// CHECK: [[TBAA19]] = !{[[META13]], [[META14]], i64 0} //. diff --git a/clang/test/BoundsSafety/CodeGen/init-struct-const-count-O0.c b/clang/test/BoundsSafety/CodeGen/init-struct-const-count-O0.c index e45d03f939b07..b744ad2bba97b 100644 --- a/clang/test/BoundsSafety/CodeGen/init-struct-const-count-O0.c +++ b/clang/test/BoundsSafety/CodeGen/init-struct-const-count-O0.c @@ -100,7 +100,7 @@ void consume_cb(struct cb); // SAME-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // SAME: [[LAND_END30]]: // SAME-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// SAME-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// SAME-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -194,7 +194,7 @@ void init_list_cb(int count_param, int*__counted_by(count_param) ptr) { // SAME-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // SAME: [[LAND_END30]]: // SAME-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// SAME-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// SAME-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -337,7 +337,7 @@ void init_list_cb_bidi(int count_param, int* __bidi_indexable ptr) { // NEW-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // NEW: [[LAND_END30]]: // NEW-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5:[0-9]+]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -458,7 +458,7 @@ void compound_literal_init_cb(int count_param, int*__counted_by(count_param) ptr // NEW-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // NEW: [[LAND_END30]]: // NEW-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -520,8 +520,8 @@ void consume_cbon(struct cbon); // SAME-NEXT: [[TMP0:%.*]] = load i32, ptr [[COUNT_PARAM_ADDR]], align 4 // SAME-NEXT: [[TMP1:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // SAME-NEXT: [[TMP2:%.*]] = load i32, ptr [[COUNT_PARAM_ADDR]], align 4 -// SAME-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META3:![0-9]+]] -// SAME-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META3]] +// SAME-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4:![0-9]+]] +// SAME-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] // SAME: [[BOUNDSCHECK_NOTNULL]]: // SAME-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // SAME-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -605,7 +605,7 @@ void consume_cbon(struct cbon); // SAME-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // SAME: [[LAND_END37]]: // SAME-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// SAME-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// SAME-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -713,7 +713,7 @@ void init_list_cbon(int count_param, int*__counted_by_or_null(count_param) ptr) // SAME-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // SAME: [[LAND_END37]]: // SAME-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// SAME-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// SAME-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -811,8 +811,8 @@ void init_list_cbon_bidi(int count_param, int*__bidi_indexable ptr) { // NEW-NEXT: [[TMP0:%.*]] = load i32, ptr [[COUNT_PARAM_ADDR]], align 4 // NEW-NEXT: [[TMP1:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // NEW-NEXT: [[TMP2:%.*]] = load i32, ptr [[COUNT_PARAM_ADDR]], align 4 -// NEW-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META3:![0-9]+]] -// NEW-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4:![0-9]+]] +// NEW-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] // NEW: [[BOUNDSCHECK_NOTNULL]]: // NEW-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // NEW-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -896,7 +896,7 @@ void init_list_cbon_bidi(int count_param, int*__bidi_indexable ptr) { // NEW-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // NEW: [[LAND_END37]]: // NEW-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -1031,7 +1031,7 @@ void compound_literal_init_cbon(int count_param, int*__counted_by_or_null(count_ // NEW-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // NEW: [[LAND_END37]]: // NEW-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -1150,7 +1150,7 @@ void consume_sb(struct sb); // SAME-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // SAME: [[LAND_END30]]: // SAME-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// SAME-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// SAME-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -1243,7 +1243,7 @@ void init_list_sb(int count_param, char*__sized_by(count_param) ptr) { // SAME-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // SAME: [[LAND_END30]]: // SAME-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// SAME-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// SAME-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -1385,7 +1385,7 @@ void init_list_bidi(int count_param, char*__bidi_indexable ptr) { // NEW-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // NEW: [[LAND_END30]]: // NEW-NEXT: [[TMP7:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP6]], %[[LAND_END]] ], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP7]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -1505,7 +1505,7 @@ void compound_literal_init_sb(int count_param, char*__sized_by(count_param) ptr) // NEW-NEXT: br label %[[LAND_END30]], !annotation [[META2]] // NEW: [[LAND_END30]]: // NEW-NEXT: [[TMP2:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP1]], %[[LAND_END]] ], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP2]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -1567,8 +1567,8 @@ void consume_sbon(struct sbon); // SAME-NEXT: [[TMP0:%.*]] = load i32, ptr [[COUNT_PARAM_ADDR]], align 4 // SAME-NEXT: [[TMP1:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // SAME-NEXT: [[TMP2:%.*]] = load i32, ptr [[COUNT_PARAM_ADDR]], align 4 -// SAME-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META3]] -// SAME-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META3]] +// SAME-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] +// SAME-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] // SAME: [[BOUNDSCHECK_NOTNULL]]: // SAME-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // SAME-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -1651,7 +1651,7 @@ void consume_sbon(struct sbon); // SAME-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // SAME: [[LAND_END37]]: // SAME-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// SAME-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// SAME-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -1758,7 +1758,7 @@ void init_list_sbon(int count_param, char*__sized_by_or_null(count_param) ptr) { // SAME-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // SAME: [[LAND_END37]]: // SAME-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// SAME-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// SAME-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -1856,8 +1856,8 @@ void init_list_sbon_bidi(int count_param, char*__bidi_indexable ptr) { // NEW-NEXT: [[TMP0:%.*]] = load i32, ptr [[COUNT_PARAM_ADDR]], align 4 // NEW-NEXT: [[TMP1:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8 // NEW-NEXT: [[TMP2:%.*]] = load i32, ptr [[COUNT_PARAM_ADDR]], align 4 -// NEW-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META3]] -// NEW-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META3]] +// NEW-NEXT: [[TMP3:%.*]] = icmp ne ptr [[TMP1]], null, !annotation [[META4]] +// NEW-NEXT: br i1 [[TMP3]], label %[[BOUNDSCHECK_NOTNULL:.*]], label %[[BOUNDSCHECK_NULL:.*]], !annotation [[META4]] // NEW: [[BOUNDSCHECK_NOTNULL]]: // NEW-NEXT: [[IDX_EXT:%.*]] = sext i32 [[TMP2]] to i64 // NEW-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 [[IDX_EXT]] @@ -1940,7 +1940,7 @@ void init_list_sbon_bidi(int count_param, char*__bidi_indexable ptr) { // NEW-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // NEW: [[LAND_END37]]: // NEW-NEXT: [[TMP12:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[BOUNDSCHECK_CONT]] ], [ [[TMP11]], %[[LOR_END]] ], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP12]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -2074,7 +2074,7 @@ void compound_literal_init_sbon(int count_param, char*__sized_by_or_null(count_p // NEW-NEXT: br label %[[LAND_END37]], !annotation [[META2]] // NEW: [[LAND_END37]]: // NEW-NEXT: [[TMP3:%.*]] = phi i1 [ false, %[[LAND_LHS_TRUE]] ], [ false, %[[ENTRY]] ], [ [[TMP2]], %[[LOR_END]] ], !annotation [[META2]] -// NEW-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// NEW-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR5]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -2104,10 +2104,12 @@ void compound_literal_init_sbon_bidi(int count_param, char*__bidi_indexable ptr) #endif //. // SAME: [[META2]] = !{!"bounds-safety-generic"} -// SAME: [[META3]] = !{!"bounds-safety-check-ptr-neq-null"} +// SAME: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// SAME: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} //. // LEGACY: [[META2]] = !{!"bounds-safety-check-ptr-neq-null"} //. // NEW: [[META2]] = !{!"bounds-safety-generic"} -// NEW: [[META3]] = !{!"bounds-safety-check-ptr-neq-null"} +// NEW: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// NEW: [[META4]] = !{!"bounds-safety-check-ptr-neq-null"} //. diff --git a/clang/test/BoundsSafety/CodeGen/init-struct-const-count-O2.c b/clang/test/BoundsSafety/CodeGen/init-struct-const-count-O2.c index 3ddd813e8b270..b965bb5e7cfe6 100644 --- a/clang/test/BoundsSafety/CodeGen/init-struct-const-count-O2.c +++ b/clang/test/BoundsSafety/CodeGen/init-struct-const-count-O2.c @@ -65,7 +65,7 @@ void init_list_cb(int count_param, int*__counted_by(count_param) ptr) { // SAME-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // SAME-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[COUNT_PARAM]], -1, !annotation [[META2]] // SAME-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// SAME-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// SAME-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10:![0-9]+]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -147,7 +147,7 @@ void compound_literal_init_cb(int count_param, int*__counted_by(count_param) ptr // NEW-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // NEW-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[COUNT_PARAM]], -1, !annotation [[META2]] // NEW-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// NEW-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// NEW-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10:![0-9]+]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -181,7 +181,7 @@ void consume_cbon(struct cbon); // SAME-LABEL: define dso_local void @init_list_cbon( // SAME-SAME: i32 noundef [[COUNT_PARAM:%.*]], ptr noundef [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // SAME-NEXT: [[ENTRY:.*:]] -// SAME-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[PTR]], null, !annotation [[META10:![0-9]+]] +// SAME-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[PTR]], null, !annotation [[META11:![0-9]+]] // SAME-NEXT: [[CMP_NOT47:%.*]] = icmp slt i32 [[COUNT_PARAM]], 0 // SAME-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT47]], [[DOTNOT]], !annotation [[META2]] // SAME-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -229,7 +229,7 @@ void init_list_cbon(int count_param, int*__counted_by_or_null(count_param) ptr) // SAME-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // SAME-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[COUNT_PARAM]], -1, !annotation [[META2]] // SAME-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// SAME-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// SAME-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -261,7 +261,7 @@ void init_list_cbon_bidi(int count_param, int*__bidi_indexable ptr) { // NEW-LABEL: define dso_local void @compound_literal_init_cbon( // NEW-SAME: i32 noundef [[COUNT_PARAM:%.*]], ptr noundef [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // NEW-NEXT: [[ENTRY:.*:]] -// NEW-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[PTR]], null, !annotation [[META10:![0-9]+]] +// NEW-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[PTR]], null, !annotation [[META11:![0-9]+]] // NEW-NEXT: [[CMP_NOT47:%.*]] = icmp slt i32 [[COUNT_PARAM]], 0 // NEW-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT47]], [[DOTNOT]], !annotation [[META2]] // NEW-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -320,7 +320,7 @@ void compound_literal_init_cbon(int count_param, int*__counted_by_or_null(count_ // NEW-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_DIV]], [[CONV]], !annotation [[META2]] // NEW-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[COUNT_PARAM]], -1, !annotation [[META2]] // NEW-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// NEW-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// NEW-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -383,7 +383,7 @@ void init_list_sb(int count_param, char*__sized_by(count_param) ptr) { // SAME-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[LAND_LHS_TRUE:.*]], !annotation [[META2]] // SAME: [[LAND_LHS_TRUE]]: // SAME-NEXT: [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// SAME-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA11:![0-9]+]] +// SAME-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA12:![0-9]+]] // SAME-NEXT: [[CMP14_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP4_SROA_1_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation [[META2]] // SAME-NEXT: br i1 [[CMP14_NOT]], label %[[TRAP]], label %[[LAND_RHS:.*]], !annotation [[META2]] // SAME: [[LAND_RHS]]: @@ -394,7 +394,7 @@ void init_list_sb(int count_param, char*__sized_by(count_param) ptr) { // SAME-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // SAME-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[COUNT_PARAM]], -1, !annotation [[META2]] // SAME-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// SAME-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// SAME-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -464,7 +464,7 @@ void compound_literal_init_sb(int count_param, char*__sized_by(count_param) ptr) // NEW-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[LAND_LHS_TRUE:.*]], !annotation [[META2]] // NEW: [[LAND_LHS_TRUE]]: // NEW-NEXT: [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// NEW-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA11:![0-9]+]] +// NEW-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA12:![0-9]+]] // NEW-NEXT: [[CMP14_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP4_SROA_1_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation [[META2]] // NEW-NEXT: br i1 [[CMP14_NOT]], label %[[TRAP]], label %[[LAND_RHS:.*]], !annotation [[META2]] // NEW: [[LAND_RHS]]: @@ -475,7 +475,7 @@ void compound_literal_init_sb(int count_param, char*__sized_by(count_param) ptr) // NEW-NEXT: [[CMP25:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // NEW-NEXT: [[CMP28:%.*]] = icmp sgt i32 [[COUNT_PARAM]], -1, !annotation [[META2]] // NEW-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP28]], [[CMP25]] -// NEW-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !annotation [[META2]] +// NEW-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT:.*]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -509,7 +509,7 @@ void consume_sbon(struct sbon); // SAME-LABEL: define dso_local void @init_list_sbon( // SAME-SAME: i32 noundef [[COUNT_PARAM:%.*]], ptr noundef [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // SAME-NEXT: [[ENTRY:.*:]] -// SAME-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[PTR]], null, !annotation [[META10]] +// SAME-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[PTR]], null, !annotation [[META11]] // SAME-NEXT: [[CMP_NOT47:%.*]] = icmp slt i32 [[COUNT_PARAM]], 0 // SAME-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT47]], [[DOTNOT]], !annotation [[META2]] // SAME-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -539,7 +539,7 @@ void init_list_sbon(int count_param, char*__sized_by_or_null(count_param) ptr) { // SAME-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[LAND_LHS_TRUE:.*]], !annotation [[META2]] // SAME: [[LAND_LHS_TRUE]]: // SAME-NEXT: [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// SAME-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA11]] +// SAME-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA12]] // SAME-NEXT: [[CMP14_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP4_SROA_1_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation [[META2]] // SAME-NEXT: br i1 [[CMP14_NOT]], label %[[TRAP]], label %[[LAND_RHS:.*]], !annotation [[META2]] // SAME: [[LAND_RHS]]: @@ -556,7 +556,7 @@ void init_list_sbon(int count_param, char*__sized_by_or_null(count_param) ptr) { // SAME-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // SAME-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[COUNT_PARAM]], -1, !annotation [[META2]] // SAME-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// SAME-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// SAME-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // SAME: [[TRAP]]: // SAME-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // SAME-NEXT: unreachable, !annotation [[META2]] @@ -588,7 +588,7 @@ void init_list_sbon_bidi(int count_param, char*__bidi_indexable ptr) { // NEW-LABEL: define dso_local void @compound_literal_init_sbon( // NEW-SAME: i32 noundef [[COUNT_PARAM:%.*]], ptr noundef [[PTR:%.*]]) local_unnamed_addr #[[ATTR0]] { // NEW-NEXT: [[ENTRY:.*:]] -// NEW-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[PTR]], null, !annotation [[META10]] +// NEW-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[PTR]], null, !annotation [[META11]] // NEW-NEXT: [[CMP_NOT47:%.*]] = icmp slt i32 [[COUNT_PARAM]], 0 // NEW-NEXT: [[CMP_NOT:%.*]] = and i1 [[CMP_NOT47]], [[DOTNOT]], !annotation [[META2]] // NEW-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[CONT:.*]], !annotation [[META2]] @@ -629,7 +629,7 @@ void compound_literal_init_sbon(int count_param, char*__sized_by_or_null(count_p // NEW-NEXT: br i1 [[CMP_NOT]], label %[[TRAP:.*]], label %[[LAND_LHS_TRUE:.*]], !annotation [[META2]] // NEW: [[LAND_LHS_TRUE]]: // NEW-NEXT: [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// NEW-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA11]] +// NEW-NEXT: [[AGG_TEMP4_SROA_1_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA12]] // NEW-NEXT: [[CMP14_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP4_SROA_1_0_COPYLOAD]], [[AGG_TEMP_SROA_0_0_COPYLOAD]], !annotation [[META2]] // NEW-NEXT: br i1 [[CMP14_NOT]], label %[[TRAP]], label %[[LAND_RHS:.*]], !annotation [[META2]] // NEW: [[LAND_RHS]]: @@ -646,7 +646,7 @@ void compound_literal_init_sbon(int count_param, char*__sized_by_or_null(count_p // NEW-NEXT: [[CMP32:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META2]] // NEW-NEXT: [[CMP35:%.*]] = icmp sgt i32 [[COUNT_PARAM]], -1, !annotation [[META2]] // NEW-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP35]], [[CMP32]] -// NEW-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !annotation [[META2]] +// NEW-NEXT: br i1 [[SPEC_SELECT]], label %[[CONT]], label %[[TRAP]], !prof [[PROF10]], !annotation [[META2]] // NEW: [[TRAP]]: // NEW-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META2]] // NEW-NEXT: unreachable, !annotation [[META2]] @@ -673,9 +673,10 @@ void compound_literal_init_sbon_bidi(int count_param, char*__bidi_indexable ptr) // SAME: [[META7]] = !{!"Simple C/C++ TBAA"} // SAME: [[META8]] = !{!"bounds-safety-generic", [[META9:![0-9]+]]} // SAME: [[META9]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// SAME: [[META10]] = !{!"bounds-safety-check-ptr-neq-null"} -// SAME: [[TBAA11]] = !{[[META12:![0-9]+]], [[META12]], i64 0} -// SAME: [[META12]] = !{!"p1 omnipotent char", [[META5]], i64 0} +// SAME: [[PROF10]] = !{!"branch_weights", i32 1048575, i32 1} +// SAME: [[META11]] = !{!"bounds-safety-check-ptr-neq-null"} +// SAME: [[TBAA12]] = !{[[META13:![0-9]+]], [[META13]], i64 0} +// SAME: [[META13]] = !{!"p1 omnipotent char", [[META5]], i64 0} //. // NEW: [[META2]] = !{!"bounds-safety-generic"} // NEW: [[TBAA3]] = !{[[META4:![0-9]+]], [[META4]], i64 0} @@ -685,7 +686,8 @@ void compound_literal_init_sbon_bidi(int count_param, char*__bidi_indexable ptr) // NEW: [[META7]] = !{!"Simple C/C++ TBAA"} // NEW: [[META8]] = !{!"bounds-safety-generic", [[META9:![0-9]+]]} // NEW: [[META9]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// NEW: [[META10]] = !{!"bounds-safety-check-ptr-neq-null"} -// NEW: [[TBAA11]] = !{[[META12:![0-9]+]], [[META12]], i64 0} -// NEW: [[META12]] = !{!"p1 omnipotent char", [[META5]], i64 0} +// NEW: [[PROF10]] = !{!"branch_weights", i32 1048575, i32 1} +// NEW: [[META11]] = !{!"bounds-safety-check-ptr-neq-null"} +// NEW: [[TBAA12]] = !{[[META13:![0-9]+]], [[META13]], i64 0} +// NEW: [[META13]] = !{!"p1 omnipotent char", [[META5]], i64 0} //. diff --git a/clang/test/BoundsSafety/CodeGen/large-array-subscript-x86_64.c b/clang/test/BoundsSafety/CodeGen/large-array-subscript-x86_64.c index 065e52c70b425..b5fea2b6a9aba 100644 --- a/clang/test/BoundsSafety/CodeGen/large-array-subscript-x86_64.c +++ b/clang/test/BoundsSafety/CodeGen/large-array-subscript-x86_64.c @@ -12,16 +12,16 @@ // CHECK-NEXT: [[UPPER:%.*]] = getelementptr inbounds float, ptr [[ARRAYDECAY]], i64 80 // CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr float, ptr [[ARRAYDECAY]], i64 19 // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[UPPER]], !annotation [[META2:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[ARRAYIDX]], [[ARRAYDECAY]], !annotation [[META3:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[ARRAYIDX]], [[ARRAYDECAY]], !annotation [[META4:![0-9]+]] +// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP1]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT2]]: // CHECK-NEXT: [[TMP2:%.*]] = load float, ptr [[ARRAYIDX]], align 4 // CHECK-NEXT: ret float [[TMP2]] @@ -60,16 +60,16 @@ float large_array_subscript(void) { // CHECK-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // CHECK-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // CHECK-NEXT: [[TMP6:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// CHECK-NEXT: br i1 [[TMP6]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3]], !annotation [[META2]] // CHECK: [[TRAP]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] // CHECK-NEXT: unreachable, !annotation [[META2]] // CHECK: [[CONT]]: -// CHECK-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// CHECK-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4]] +// CHECK-NEXT: br i1 [[TMP7]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // CHECK: [[TRAP1]]: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META3]] -// CHECK-NEXT: unreachable, !annotation [[META3]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META4]] +// CHECK-NEXT: unreachable, !annotation [[META4]] // CHECK: [[CONT2]]: // CHECK-NEXT: [[TMP8:%.*]] = load float, ptr [[ARRAYIDX]], align 4 // CHECK-NEXT: [[TMP9:%.*]] = load ptr, ptr [[SAVED_STACK]], align 8 @@ -82,5 +82,6 @@ float vla_subscript(int size) { } //. // CHECK: [[META2]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[META3]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// CHECK: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/nested-struct-member-count-O2.c b/clang/test/BoundsSafety/CodeGen/nested-struct-member-count-O2.c index f06112c806bff..27c3eb2c815e2 100644 --- a/clang/test/BoundsSafety/CodeGen/nested-struct-member-count-O2.c +++ b/clang/test/BoundsSafety/CodeGen/nested-struct-member-count-O2.c @@ -28,7 +28,7 @@ struct Outer { // CHECK-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[FAM]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP2]], [[TMP1]], !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT8:%.*]], label [[TRAP:%.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT8:%.*]], label [[TRAP:%.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2:[0-9]+]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -55,7 +55,7 @@ char access(struct Outer *bar, int index) { // CHECK: flex.base.nonnull: // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], i64 8 // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[TMP0]], !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP:%.*]], label [[CONT:%.*]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP:%.*]], label [[CONT:%.*]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], !annotation {{![0-9]+}} // CHECK-NEXT: unreachable, !annotation {{![0-9]+}} @@ -63,7 +63,7 @@ char access(struct Outer *bar, int index) { // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[AGG_TEMP1_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[AGG_TEMP1_SROA_3_0_COPYLOAD]], [[AGG_TEMP1_SROA_0_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TMP1]], i1 [[TMP2]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT18:%.*]], label [[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT18:%.*]], label [[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: cont18: // CHECK-NEXT: [[FLEX_COUNT_MINUS:%.*]] = icmp sgt i32 [[LEN]], -1, !annotation {{![0-9]+}} // CHECK-NEXT: [[UPPER_INTPTR:%.*]] = ptrtoint ptr [[AGG_TEMP1_SROA_2_0_COPYLOAD]] to i64, !annotation {{![0-9]+}} @@ -74,7 +74,7 @@ char access(struct Outer *bar, int index) { // CHECK-NEXT: [[OR_COND49:%.*]] = select i1 [[FLEX_COUNT_MINUS]], i1 [[FLEX_COUNT_CHECK]], i1 false, !annotation {{![0-9]+}} // CHECK-NEXT: [[TMP3:%.*]] = icmp ult ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[AGG_TEMP1_SROA_2_0_COPYLOAD]], !annotation {{![0-9]+}} // CHECK-NEXT: [[OR_COND60:%.*]] = select i1 [[OR_COND49]], i1 [[TMP3]], i1 false, !annotation {{![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND60]], label [[BOUNDSCHECK_CONT:%.*]], label [[TRAP]], !annotation {{![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND60]], label [[BOUNDSCHECK_CONT:%.*]], label [[TRAP]], !prof {{![0-9]+}}, !annotation {{![0-9]+}} // CHECK: boundscheck.cont.thread: // CHECK-NEXT: store i32 [[LEN]], ptr inttoptr (i64 4 to ptr), align 4, !tbaa {{![0-9]+}} // CHECK-NEXT: br label [[CONT46:%.*]] diff --git a/clang/test/BoundsSafety/CodeGen/opt-remarks/bounds-safety-ptr-conversion-O0.c b/clang/test/BoundsSafety/CodeGen/opt-remarks/bounds-safety-ptr-conversion-O0.c index 3565d2b482851..fef4dd541ada6 100644 --- a/clang/test/BoundsSafety/CodeGen/opt-remarks/bounds-safety-ptr-conversion-O0.c +++ b/clang/test/BoundsSafety/CodeGen/opt-remarks/bounds-safety-ptr-conversion-O0.c @@ -42,7 +42,7 @@ int main(int argc, char **argv) { // IR: [[LABEL_TRAP_RES]]: // IR: %[[TRAP_RES:[a-z0-9_]+]] = phi i1 [ false, %[[LABEL_CONT]] ], [ false, %entry ], [ %[[TRAP_RES2]], %[[LABEL_TRAP_RES2]] ], !dbg ![[TRAP_LOC_MISSING:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT:[0-9]+]] -// IR: br i1 %[[TRAP_RES]], label %[[LABEL_CONT4:[a-z0-9.]+]], label %[[LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_11_44]], !annotation ![[ANNOT_CONV_TO_COUNT]] +// IR: br i1 %[[TRAP_RES]], label %[[LABEL_CONT4:[a-z0-9.]+]], label %[[LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_11_44]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT]] // IR: [[LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[TRAP_LOC_11_44:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT]] @@ -54,7 +54,7 @@ int main(int argc, char **argv) { // IR: [[LABEL_CONT5]]: // IR: %[[LT_CHECK_RES:[a-z0-9_]+]] = icmp ult ptr %[[WIDE_PTR]], {{.*}}, !dbg ![[LOC_TMP]], !annotation ![[ANNOT3:[0-9]+]] -// IR: br i1 %[[LT_CHECK_RES]], label %[[LABEL_CONT6:[a-z0-9.]+]], label %[[LABEL_TRAP2:[a-z0-9.]+]], !dbg ![[LOC_TMP]], !annotation ![[ANNOT3]] +// IR: br i1 %[[LT_CHECK_RES]], label %[[LABEL_CONT6:[a-z0-9.]+]], label %[[LABEL_TRAP2:[a-z0-9.]+]], !dbg ![[LOC_TMP]], !prof ![[PROFILE_METADATA]], !annotation ![[ANNOT3]] // IR: [[LABEL_TRAP2]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[TRAP_LOC2:[0-9]+]], !annotation ![[ANNOT_TRAP:[0-9]+]] @@ -62,7 +62,7 @@ int main(int argc, char **argv) { // IR: [[LABEL_CONT6]]: // IR: %[[GE_CHECK_RES:[a-z0-9_]+]] = icmp uge ptr %[[WIDE_PTR]], {{.*}}, !dbg ![[LOC_TMP]], !annotation ![[ANNOT4:[0-9]+]] -// IR: br i1 %[[GE_CHECK_RES]], label %[[LABEL_CONT7:[a-z0-9.]+]], label %[[LABEL_TRAP3:[a-z0-9.]+]], !dbg ![[LOC_TMP]], !annotation ![[ANNOT4]] +// IR: br i1 %[[GE_CHECK_RES]], label %[[LABEL_CONT7:[a-z0-9.]+]], label %[[LABEL_TRAP3:[a-z0-9.]+]], !dbg ![[LOC_TMP]], !prof ![[PROFILE_METADATA]], !annotation ![[ANNOT4]] // IR: [[LABEL_END]]: diff --git a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-argc-O0.c b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-argc-O0.c index 26d25d348f641..1741e2a00aaa9 100644 --- a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-argc-O0.c +++ b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-argc-O0.c @@ -19,7 +19,7 @@ int main(int argc, char **argv) { // IR-LABEL: @foo // ... // IR: icmp ult {{.*}} !dbg ![[LOC_10_16:[0-9]+]], !annotation ![[ANNOT_LT_UB:[0-9]+]] -// IR: br i1 %{{[0-9]+}}, label %[[FOO_LABEL_CONT:[a-z0-9]+]], label %[[FOO_LABEL_TRAP:[a-z0-9]+]], !dbg ![[LOC_10_16]], !annotation ![[ANNOT_LT_UB]] +// IR: br i1 %{{[0-9]+}}, label %[[FOO_LABEL_CONT:[a-z0-9]+]], label %[[FOO_LABEL_TRAP:[a-z0-9]+]], !dbg ![[LOC_10_16]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[ANNOT_LT_UB]] // ... // IR: [[FOO_LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[LT_TRAP_LOC_10_16:[0-9]+]], !annotation ![[ANNOT_LT_UB]] @@ -27,7 +27,7 @@ int main(int argc, char **argv) { // ... // IR: [[FOO_LABEL_CONT]]: // IR: icmp uge {{.*}} !dbg ![[LOC_10_16]], !annotation ![[ANNOT_GE_LB:[0-9]+]] -// IR: br i1 %{{[0-9]+}}, label %{{[a-z0-9]+}}, label %[[FOO_LABEL_TRAP2:[a-z0-9]+]], !dbg ![[LOC_10_16]], !annotation ![[ANNOT_GE_LB]] +// IR: br i1 %{{[0-9]+}}, label %{{[a-z0-9]+}}, label %[[FOO_LABEL_TRAP2:[a-z0-9]+]], !dbg ![[LOC_10_16]], !prof ![[PROFILE_METADATA]], !annotation ![[ANNOT_GE_LB]] // ... // IR: [[FOO_LABEL_TRAP2]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[GE_TRAP_LOC_10_16:[0-9]+]], !annotation ![[ANNOT_GE_LB]] @@ -52,7 +52,7 @@ int main(int argc, char **argv) { // IR: [[MAIN_LABEL_TRAP_RES]]: // IR: %[[TRAP_RES:[a-z0-9_]+]] = phi i1 [ false, %[[MAIN_LABEL_CONT]] ], [ false, %entry ], [ %[[WIDTH_CHECK_RES]], %[[MAIN_LABEL_CONT2]] ], !dbg ![[TRAP_LOC_MISSING:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT:[0-9]+]] -// IR: br i1 %[[TRAP_RES]], label {{.*}}, label %[[MAIN_LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_16_5]], !annotation ![[ANNOT_CONV_TO_COUNT]] +// IR: br i1 %[[TRAP_RES]], label {{.*}}, label %[[MAIN_LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_16_5]], !prof ![[PROFILE_METADATA]], !annotation ![[ANNOT_CONV_TO_COUNT]] // IR: [[MAIN_LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[TRAP_LOC_16_5:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT]] diff --git a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-argc-O2.c b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-argc-O2.c index d5aba8ce122e4..521d644d04033 100644 --- a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-argc-O2.c +++ b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-argc-O2.c @@ -26,7 +26,7 @@ int main(int argc, char **argv) { // IR-NEXT: %[[LOWER_CHECK:[a-z0-9.]+]] = icmp uge ptr %[[PTR]], %[[ARR]], !dbg ![[LOC_10_16]], !annotation ![[ANNOT_GE_LB:[0-9]+]] // TODO: The condition and branch should also be ANNOT_LT_UB_OR_GT_LB (rdar://109089053) // IR-NEXT: %[[COND:[a-z0-9.]+]] = and i1 %[[UPPER_CHECK]], %[[LOWER_CHECK]], !dbg ![[LOC_10_16]], !annotation ![[ANNOT_GE_LB]] -// IR-NEXT: br i1 %{{[a-z.0-9]+}}, label %[[FOO_LABEL_CONT:[a-z0-9]+]], label %[[FOO_LABEL_TRAP:[a-z0-9]+]], !dbg ![[LOC_10_16]], !annotation ![[ANNOT_LT_UB]] +// IR-NEXT: br i1 %{{[a-z.0-9]+}}, label %[[FOO_LABEL_CONT:[a-z0-9]+]], label %[[FOO_LABEL_TRAP:[a-z0-9]+]], !dbg ![[LOC_10_16]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[ANNOT_LT_UB]] // ... // IR: [[FOO_LABEL_TRAP]]: // IR-NEXT: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[LT_TRAP_LOC_10_16:[0-9]+]], !annotation ![[ANNOT_LT_UB_OR_GE_LB:[0-9]+]] diff --git a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-const-O0.c b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-const-O0.c index b8f4b07950f44..95b104d1ae7dc 100644 --- a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-const-O0.c +++ b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-bounds-const-O0.c @@ -19,14 +19,14 @@ int main() { // IR-LABEL: @foo // ... // IR: icmp ult {{.*}} !dbg ![[LOC_10_14:[0-9]+]], !annotation ![[ANNOT_LT_UB:[0-9]+]] -// IR: br i1 %{{[0-9]+}}, label %[[FOO_LABEL_CONT:[a-z0-9]+]], label %[[FOO_LABEL_TRAP:[a-z0-9]+]], !dbg ![[LOC_10_14]], !annotation ![[ANNOT_LT_UB]] +// IR: br i1 %{{[0-9]+}}, label %[[FOO_LABEL_CONT:[a-z0-9]+]], label %[[FOO_LABEL_TRAP:[a-z0-9]+]], !dbg ![[LOC_10_14]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[ANNOT_LT_UB]] // ... // IR: [[FOO_LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[LT_TRAP_LOC_10_14:[0-9]+]], !annotation ![[ANNOT_LT_UB]] // IR-NEXT: unreachable, !dbg ![[LT_TRAP_LOC_10_14]], !annotation ![[ANNOT_LT_UB]] // ... // IR: [[FOO_LABEL_CONT]]: -// IR: br i1 %{{[0-9]+}}, label %{{[a-z0-9]+}}, label %[[FOO_LABEL_TRAP2:[a-z0-9]+]], !dbg ![[LOC_10_14]], !annotation ![[ANNOT_GE_LB:[0-9]+]] +// IR: br i1 %{{[0-9]+}}, label %{{[a-z0-9]+}}, label %[[FOO_LABEL_TRAP2:[a-z0-9]+]], !dbg ![[LOC_10_14]], !prof ![[PROFILE_METADATA]], !annotation ![[ANNOT_GE_LB:[0-9]+]] // ... // IR: [[FOO_LABEL_TRAP2]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[GT_TRAP_LOC_10_14:[0-9]+]], !annotation ![[ANNOT_GE_LB]] @@ -52,7 +52,7 @@ int main() { // IR: [[MAIN_LABEL_TRAP_RES]]: // IR: %[[TRAP_RES:[a-z0-9_]+]] = phi i1 [ false, %[[MAIN_LABEL_CONT]] ], [ false, %entry ], [ %[[WIDTH_CHECK_RES]], %[[MAIN_LABEL_CONT2]] ], !dbg ![[TRAP_LOC_MISSING:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT:[0-9]+]] -// IR: br i1 %[[TRAP_RES]], label {{.*}}, label %[[MAIN_LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_16_5]], !annotation ![[ANNOT_CONV_TO_COUNT]] +// IR: br i1 %[[TRAP_RES]], label {{.*}}, label %[[MAIN_LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_16_5]], !prof ![[PROFILE_METADATA]], !annotation ![[ANNOT_CONV_TO_COUNT]] // IR: [[MAIN_LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[TRAP_LOC_16_5:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT]] diff --git a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-count-assignment-argc-O0.c b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-count-assignment-argc-O0.c index cfa3f97c9a20b..43b92bad4365a 100644 --- a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-count-assignment-argc-O0.c +++ b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-count-assignment-argc-O0.c @@ -19,7 +19,7 @@ int main(int argc, char **argv) { // IR: store i32 %[[ARGC_LOAD1]], ptr %[[COUNT_RT_ALLOCA:[a-z0-9._]+]], align 4, !dbg ![[LOC_10_9:[0-9]+]] // IR: %[[COUNT_RT_LOAD:[a-z0-9._]+]] = load i32, ptr %[[COUNT_RT_ALLOCA]], align 4, !dbg ![[LOC_12_16:[0-9]+]] // IR: icmp eq i32 %[[COUNT_RT_LOAD]], 0, !dbg ![[LOC_11_44:[0-9]+]], !annotation ![[NEW_COUNT_POSITIVE:[a-z0-9]+]] -// IR: br i1 {{.*}}, label %[[LABEL_CONT:cont]], label %[[LABEL_TRAP:trap]], !dbg ![[LOC_11_44]], !annotation ![[NEW_COUNT_POSITIVE]] +// IR: br i1 {{.*}}, label %[[LABEL_CONT:cont]], label %[[LABEL_TRAP:trap]], !dbg ![[LOC_11_44]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[NEW_COUNT_POSITIVE]] // ... // IR: [[LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[TRAP_LOC_11_44:[0-9]+]], !annotation ![[NEW_COUNT_POSITIVE]] @@ -51,7 +51,7 @@ int main(int argc, char **argv) { // IR: [[MAIN_LABEL_TRAP_RES]]: // IR: %[[TRAP_RES:[a-z0-9_]+]] = phi i1 [ false, %[[MAIN_LABEL_CONT]] ], [ false, %[[LABEL_CONT]] ], [ %[[TRAP_RES2]], %[[MAIN_LABEL_TRAP_RES2]] ], !dbg ![[TRAP_LOC_MISSING:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT:[0-9]+]] -// IR: br i1 %[[TRAP_RES]], label {{.*}}, label %[[MAIN_LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_12_5]], !annotation ![[ANNOT_CONV_TO_COUNT]] +// IR: br i1 %[[TRAP_RES]], label {{.*}}, label %[[MAIN_LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_12_5]], !prof ![[PROFILE_METADATA]], !annotation ![[ANNOT_CONV_TO_COUNT]] // IR: [[MAIN_LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[TRAP_LOC_12_14:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT]] diff --git a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-count-assignment-const-O0.c b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-count-assignment-const-O0.c index 0ae7cf6abdfa0..ef7259dd97a38 100644 --- a/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-count-assignment-const-O0.c +++ b/clang/test/BoundsSafety/CodeGen/opt-remarks/ptr-count-assignment-const-O0.c @@ -16,7 +16,7 @@ int main(void) { // IR: define{{.*}} i32 @main{{.*}} // IR: load {{.*}} !dbg ![[LOC_11_11:[0-9]+]] // IR: icmp eq {{.*}} 0, !dbg ![[LOC_11_37:[0-9]+]], !annotation ![[NEW_COUNT_POSITIVE:[a-z0-9]+]] -// IR: br i1 {{.*}}, label %[[LABEL_CONT:cont]], label %[[LABEL_TRAP:trap]], !dbg ![[LOC_11_37]], !annotation ![[NEW_COUNT_POSITIVE]] +// IR: br i1 {{.*}}, label %[[LABEL_CONT:cont]], label %[[LABEL_TRAP:trap]], !dbg ![[LOC_11_37]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[NEW_COUNT_POSITIVE]] // ... // IR: [[LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[TRAP_LOC_11_37:[0-9]+]], !annotation ![[NEW_COUNT_POSITIVE]] @@ -46,7 +46,7 @@ int main(void) { // IR: [[MAIN_LABEL_TRAP_RES]]: // IR: %[[TRAP_RES:[a-z0-9_]+]] = phi i1 [ false, %[[MAIN_LABEL_CONT]] ], [ false, %[[LABEL_CONT]] ], [ %[[TRAP_RES2]], %[[MAIN_LABEL_TRAP_RES2]] ], !dbg ![[TRAP_LOC_MISSING:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT:[0-9]+]] -// IR: br i1 %[[TRAP_RES]], label {{.*}}, label %[[MAIN_LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_12_5]], !annotation ![[ANNOT_CONV_TO_COUNT]] +// IR: br i1 %[[TRAP_RES]], label {{.*}}, label %[[MAIN_LABEL_TRAP:[a-z0-9.]+]], !dbg ![[LOC_12_5]], !prof ![[PROFILE_METADATA]], !annotation ![[ANNOT_CONV_TO_COUNT]] // IR: [[MAIN_LABEL_TRAP]]: // IR: call void @llvm.ubsantrap(i8 25) #{{[0-9]+}}, !dbg ![[TRAP_LOC_16_5:[0-9]+]], !annotation ![[ANNOT_CONV_TO_COUNT]] diff --git a/clang/test/BoundsSafety/CodeGen/range-check-optimizations-no-bringup-missing-checks.c b/clang/test/BoundsSafety/CodeGen/range-check-optimizations-no-bringup-missing-checks.c index 445b57c78e1e9..5d3a8586f115f 100644 --- a/clang/test/BoundsSafety/CodeGen/range-check-optimizations-no-bringup-missing-checks.c +++ b/clang/test/BoundsSafety/CodeGen/range-check-optimizations-no-bringup-missing-checks.c @@ -41,7 +41,7 @@ void loop_all_accesses_in_bounds(int* __counted_by(n) dst, unsigned n) { // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[B_SROA_0_09]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[B_SROA_0_09]], [[A]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -234,7 +234,7 @@ void loop_all_accesses_in_bounds_length_ull(int* __counted_by(len) buf, unsigned // CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1 // CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i32, ptr [[DST]], i64 [[INDVARS_IV_NEXT]] // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TMP0]], label [[CONT1]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TMP0]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -263,7 +263,7 @@ void loop_accesses_out_of_bounds_eliminate_lower_check(int* __counted_by(n) dst, // CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1 // CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i32, ptr [[BUF]], i64 [[INDVARS_IV_NEXT]] // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TMP0]], label [[CONT1]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TMP0]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -295,7 +295,7 @@ void loop_accesses_out_of_bounds_eliminate_lower_check_len_signed(int* __counted // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[ARRAYIDX]], [[BUF]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -327,7 +327,7 @@ void loop_accesses_out_of_bounds_eliminate_lower_check_len_ull(int* __counted_by // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -359,7 +359,7 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check(int* __counted_by(n // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -392,7 +392,7 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_signed_len(int* __c // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -434,7 +434,7 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(int* __coun // CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1 // CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i32, ptr [[DST]], i64 [[INDVARS_IV_NEXT]] // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TMP0]], label [[CONT1:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TMP0]], label [[CONT1:%.*]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -444,7 +444,7 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(int* __coun // CHECK-NEXT: [[TMP1:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND17:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND17]], label [[CONT15]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND17]], label [[CONT15]], label [[TRAP]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: cont15: // CHECK-NEXT: store i32 0, ptr [[GEP]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[IDX_EXT]] @@ -473,7 +473,7 @@ void loop_accesses_eliminate_second_lower_check(int* __counted_by(n) dst, unsign // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[GEP]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[GEP]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1:%.*]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -484,7 +484,7 @@ void loop_accesses_eliminate_second_lower_check(int* __counted_by(n) dst, unsign // CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[ARRAYIDX9]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[ARRAYIDX9]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND17:%.*]] = and i1 [[TMP2]], [[TMP3]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND17]], label [[CONT15]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND17]], label [[CONT15]], label [[TRAP]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: cont15: // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX9]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], 2000 @@ -507,7 +507,7 @@ void loop_accesses_eliminate_later_checks(int* __counted_by(n) dst, unsigned n) // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP0]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1:%.*]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -517,7 +517,7 @@ void loop_accesses_eliminate_later_checks(int* __counted_by(n) dst, unsigned n) // CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[ARRAYIDX7]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[ARRAYIDX7]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND50:%.*]] = and i1 [[TMP3]], [[TMP2]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND50]], label [[CONT49:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND50]], label [[CONT49:%.*]], label [[TRAP]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: cont49: // CHECK-NEXT: [[ARRAYIDX43:%.*]] = getelementptr i8, ptr [[DST]], i64 8 // CHECK-NEXT: tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) [[ARRAYIDX43]], i8 0, i64 16, i1 false) @@ -543,7 +543,7 @@ void elim_consecutive_writes(int* __counted_by(n) dst, unsigned n) { // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT37:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT37:%.*]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -559,7 +559,7 @@ void elim_consecutive_writes(int* __counted_by(n) dst, unsigned n) { // CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[ARRAYIDX43]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[ARRAYIDX43]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND53:%.*]] = and i1 [[TMP3]], [[TMP2]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND53]], label [[CONT49:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND53]], label [[CONT49:%.*]], label [[TRAP]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: cont49: // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX43]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: br label [[IF_END]] @@ -589,7 +589,7 @@ void elim_consecutive_writes2(int* __counted_by(n) dst, unsigned n, unsigned idx // CHECK-NEXT: [[TMP0:%.*]] = add nuw nsw i64 [[IDX_EXT]], 4611686018427387903 // CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = and i64 [[TMP0]], 4611686018427387903 // CHECK-NEXT: [[CMP27_NOT:%.*]] = icmp samesign ult i64 [[SUB_PTR_DIV]], [[CONV]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP27_NOT]], label [[TRAP:%.*]], label [[CONT59:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP27_NOT]], label [[TRAP:%.*]], label [[CONT59:%.*]], !prof [[PROF29:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -598,7 +598,7 @@ void elim_consecutive_writes2(int* __counted_by(n) dst, unsigned n, unsigned idx // CHECK-NEXT: [[ARRAYIDX53:%.*]] = getelementptr i32, ptr [[ARG]], i64 [[CONV]] // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX53]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[SUB]], 0, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP]], label [[CONT85:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP]], label [[CONT85:%.*]], !prof [[PROF31:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cont85: // CHECK-NEXT: store i32 1, ptr [[BOUND_PTR_ARITH]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[SUB77:%.*]] = add i32 [[N]], -2 @@ -655,7 +655,7 @@ void ptrinc0(char *__counted_by(inLen) buf, // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[CURRENTBUF_SROA_0_05]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[CURRENTBUF_SROA_0_05]], [[BUF]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF10]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -707,7 +707,7 @@ void ptrinc1(char *__counted_by(inLen) buf, // CHECK-NEXT: [[IDX_EXT_LE:%.*]] = zext i32 [[TABLE_SIZE]] to i64 // CHECK-NEXT: [[ADD_PTR_LE:%.*]] = getelementptr inbounds nuw i32, ptr [[TABLE]], i64 [[IDX_EXT_LE]] // CHECK-NEXT: [[DOTNOT31:%.*]] = icmp ult ptr [[BOUND_PTR_ARITH_LE]], [[TABLE]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT31]], label [[TRAP:%.*]], label [[RETURN]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT31]], label [[TRAP:%.*]], label [[RETURN]], !prof [[PROF29]], {{!annotation ![0-9]+}} // CHECK: return: // CHECK-NEXT: [[RETVAL_SROA_4_3:%.*]] = phi ptr [ null, [[ENTRY:%.*]] ], [ [[ADD_PTR_LE]], [[IF_THEN4]] ], [ null, [[FOR_COND]] ] // CHECK-NEXT: [[RETVAL_SROA_0_3:%.*]] = phi ptr [ null, [[ENTRY]] ], [ [[BOUND_PTR_ARITH_LE]], [[IF_THEN4]] ], [ null, [[FOR_COND]] ] diff --git a/clang/test/BoundsSafety/CodeGen/range-check-optimizations-structs-no-bringup-missing-checks.c b/clang/test/BoundsSafety/CodeGen/range-check-optimizations-structs-no-bringup-missing-checks.c index 77aec6456d186..733de4324be94 100644 --- a/clang/test/BoundsSafety/CodeGen/range-check-optimizations-structs-no-bringup-missing-checks.c +++ b/clang/test/BoundsSafety/CodeGen/range-check-optimizations-structs-no-bringup-missing-checks.c @@ -57,7 +57,7 @@ struct struct_1 * access_struct_1_all_checks_removable( // CHECK-NEXT: [[BOUND_PTR_ARITH:%.*]] = getelementptr [[STRUCT_STRUCT_1]], ptr [[SRC]], i64 [[INDVARS_IV_NEXT]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[BOUND_PTR_ARITH]], i64 8 // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[TMP0]], [[ADD_PTR]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP:%.*]], label [[CONT1]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP:%.*]], label [[CONT1]], !prof [[PROF10:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -67,7 +67,7 @@ struct struct_1 * access_struct_1_all_checks_removable( // CHECK-NEXT: br i1 [[CMP3_NOT]], label [[BOUNDSCHECK_NOTNULL:%.*]], label [[FOR_COND]] // CHECK: boundscheck.notnull: // CHECK-NEXT: [[TMP2:%.*]] = icmp ult ptr [[BOUND_PTR_ARITH]], [[ADD_PTR]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TMP2]], label [[CLEANUP13]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TMP2]], label [[CLEANUP13]], label [[TRAP]], !prof [[PROF12:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cleanup13: // CHECK-NEXT: [[SPEC_SELECT:%.*]] = phi ptr [ [[BOUND_PTR_ARITH]], [[BOUNDSCHECK_NOTNULL]] ], [ null, [[FOR_COND]] ] // CHECK-NEXT: ret ptr [[SPEC_SELECT]] diff --git a/clang/test/BoundsSafety/CodeGen/range-check-optimizations-structs.c b/clang/test/BoundsSafety/CodeGen/range-check-optimizations-structs.c index 874d7cf109735..ea1de7371a32e 100644 --- a/clang/test/BoundsSafety/CodeGen/range-check-optimizations-structs.c +++ b/clang/test/BoundsSafety/CodeGen/range-check-optimizations-structs.c @@ -57,7 +57,7 @@ struct struct_1 * access_struct_1_all_checks_removable( // CHECK-NEXT: [[BOUND_PTR_ARITH:%.*]] = getelementptr [[STRUCT_STRUCT_1]], ptr [[SRC]], i64 [[INDVARS_IV_NEXT]] // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[BOUND_PTR_ARITH]], i64 8 // CHECK-NEXT: [[DOTNOT25:%.*]] = icmp ugt ptr [[TMP0]], [[ADD_PTR]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT25]], label [[TRAP:%.*]], label [[CONT1]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT25]], label [[TRAP:%.*]], label [[CONT1]], !prof [[PROF10:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -67,7 +67,7 @@ struct struct_1 * access_struct_1_all_checks_removable( // CHECK-NEXT: br i1 [[CMP3_NOT]], label [[BOUNDSCHECK_NOTNULL:%.*]], label [[FOR_COND]] // CHECK: boundscheck.notnull: // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[BOUND_PTR_ARITH]], [[TMP0]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP]], label [[CLEANUP14]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP]], label [[CLEANUP14]], !prof [[PROF13:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cleanup14: // CHECK-NEXT: [[SPEC_SELECT:%.*]] = phi ptr [ [[BOUND_PTR_ARITH]], [[BOUNDSCHECK_NOTNULL]] ], [ null, [[FOR_COND]] ] // CHECK-NEXT: ret ptr [[SPEC_SELECT]] diff --git a/clang/test/BoundsSafety/CodeGen/range-check-optimizations.c b/clang/test/BoundsSafety/CodeGen/range-check-optimizations.c index b37d01db4994f..1ba08f310e0fa 100644 --- a/clang/test/BoundsSafety/CodeGen/range-check-optimizations.c +++ b/clang/test/BoundsSafety/CodeGen/range-check-optimizations.c @@ -44,7 +44,7 @@ void loop_all_accesses_in_bounds(int* __counted_by(n) dst, unsigned n) { // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp uge ptr [[B_SROA_0_011]], [[A]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND3:%.*]] = and i1 [[TMP2]], [[OR_COND]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND3]], label [[CONT2]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND3]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF11:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -239,7 +239,7 @@ void loop_all_accesses_in_bounds_length_ull(int* __counted_by(len) buf, unsigned // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP0]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -271,7 +271,7 @@ void loop_accesses_out_of_bounds_eliminate_lower_check(int* __counted_by(n) dst, // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP0]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -306,7 +306,7 @@ void loop_accesses_out_of_bounds_eliminate_lower_check_len_signed(int* __counted // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[ARRAYIDX]], [[BUF]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND4:%.*]] = and i1 [[TMP3]], [[OR_COND]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND4]], label [[CONT3]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND4]], label [[CONT3]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -341,7 +341,7 @@ void loop_accesses_out_of_bounds_eliminate_lower_check_len_ull(int* __counted_by // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP2]], [[TMP3]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND4:%.*]] = and i1 [[TMP4]], [[OR_COND]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND4]], label [[CONT2]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND4]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -376,7 +376,7 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check(int* __counted_by(n // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP2]], [[TMP3]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND4:%.*]] = and i1 [[TMP4]], [[OR_COND]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND4]], label [[CONT2]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND4]], label [[CONT2]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -412,7 +412,7 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_signed_len(int* __c // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP2]], [[TMP3]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND5:%.*]] = and i1 [[TMP4]], [[OR_COND]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND5]], label [[CONT3]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND5]], label [[CONT3]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -456,7 +456,7 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(int* __coun // CHECK-NEXT: [[TMP1:%.*]] = icmp ule ptr [[TMP0]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[ARRAYIDX]], [[TMP0]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT2:%.*]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -470,7 +470,7 @@ void loop_accesses_out_of_bounds_cannot_eliminate_wrap_check_ull_len(int* __coun // CHECK-NEXT: [[OR_COND20:%.*]] = and i1 [[TMP5]], [[TMP6]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX10]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND21:%.*]] = and i1 [[TMP7]], [[OR_COND20]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND21]], label [[CONT17]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND21]], label [[CONT17]], label [[TRAP]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: cont17: // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX10]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], [[IDX_EXT]] @@ -502,7 +502,7 @@ void loop_accesses_eliminate_second_lower_check(int* __counted_by(n) dst, unsign // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP2]], [[TMP3]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP4:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND19:%.*]] = and i1 [[TMP4]], [[OR_COND]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND19]], label [[CONT2:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND19]], label [[CONT2:%.*]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -516,7 +516,7 @@ void loop_accesses_eliminate_second_lower_check(int* __counted_by(n) dst, unsign // CHECK-NEXT: [[OR_COND20:%.*]] = and i1 [[TMP6]], [[TMP7]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP8:%.*]] = icmp uge ptr [[ARRAYIDX10]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND21:%.*]] = and i1 [[TMP8]], [[OR_COND20]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND21]], label [[CONT17]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND21]], label [[CONT17]], label [[TRAP]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: cont17: // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX10]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], 2000 @@ -542,7 +542,7 @@ void loop_accesses_eliminate_later_checks(int* __counted_by(n) dst, unsigned n) // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP2]], [[TMP1]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND55:%.*]] = and i1 [[TMP3]], [[OR_COND]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND55]], label [[CONT2:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND55]], label [[CONT2:%.*]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -555,11 +555,11 @@ void loop_accesses_eliminate_later_checks(int* __counted_by(n) dst, unsigned n) // CHECK-NEXT: [[OR_COND56:%.*]] = and i1 [[TMP6]], [[TMP5]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX8]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND57:%.*]] = and i1 [[TMP7]], [[OR_COND56]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND57]], label [[CONT15:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND57]], label [[CONT15:%.*]], label [[TRAP]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: cont15: // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX8]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[ARRAYIDX8]], [[ADD_PTR]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP]], label [[CONT54:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP]], label [[CONT54:%.*]], !prof [[PROF26:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cont54: // CHECK-NEXT: [[ARRAYIDX21:%.*]] = getelementptr i8, ptr [[DST]], i64 16 // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX21]], align 4, {{!tbaa ![0-9]+}} @@ -591,7 +591,7 @@ void elim_consecutive_writes(int* __counted_by(n) dst, unsigned n) { // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP1]], [[TMP2]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP3:%.*]] = icmp uge ptr [[ARRAYIDX]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND55:%.*]] = and i1 [[TMP3]], [[OR_COND]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND55]], label [[CONT2:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND55]], label [[CONT2:%.*]], label [[TRAP:%.*]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -602,11 +602,11 @@ void elim_consecutive_writes(int* __counted_by(n) dst, unsigned n) { // CHECK-NEXT: [[TMP5:%.*]] = icmp ule ptr [[TMP4]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP6:%.*]] = icmp ule ptr [[ARRAYIDX8]], [[TMP4]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND56:%.*]] = and i1 [[TMP6]], [[TMP5]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND56]], label [[CONT15:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND56]], label [[CONT15:%.*]], label [[TRAP]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: cont15: // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX8]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[ARRAYIDX8]], [[ADD_PTR]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP]], label [[CONT41:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT]], label [[TRAP]], label [[CONT41:%.*]], !prof [[PROF26]], {{!annotation ![0-9]+}} // CHECK: cont41: // CHECK-NEXT: [[ARRAYIDX21:%.*]] = getelementptr i8, ptr [[DST]], i64 12 // CHECK-NEXT: store i32 0, ptr [[ARRAYIDX21]], align 4, {{!tbaa ![0-9]+}} @@ -618,7 +618,7 @@ void elim_consecutive_writes(int* __counted_by(n) dst, unsigned n) { // CHECK-NEXT: [[OR_COND62:%.*]] = and i1 [[TMP9]], [[TMP8]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP10:%.*]] = icmp uge ptr [[TMP4]], [[DST]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND63:%.*]] = and i1 [[TMP10]], [[OR_COND62]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND63]], label [[CONT54:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND63]], label [[CONT54:%.*]], label [[TRAP]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: cont54: // CHECK-NEXT: store i32 0, ptr [[TMP4]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: br label [[IF_END]] @@ -648,7 +648,7 @@ void elim_consecutive_writes2(int* __counted_by(n) dst, unsigned n, unsigned idx // CHECK-NEXT: [[TMP0:%.*]] = add nuw nsw i64 [[IDX_EXT]], 4611686018427387903 // CHECK-NEXT: [[SUB_PTR_DIV:%.*]] = and i64 [[TMP0]], 4611686018427387903 // CHECK-NEXT: [[CMP27_NOT:%.*]] = icmp samesign ult i64 [[SUB_PTR_DIV]], [[CONV]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[CMP27_NOT]], label [[TRAP:%.*]], label [[CONT61:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[CMP27_NOT]], label [[TRAP:%.*]], label [[CONT61:%.*]], !prof [[PROF30:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -661,7 +661,7 @@ void elim_consecutive_writes2(int* __counted_by(n) dst, unsigned n, unsigned idx // CHECK-NEXT: [[TMP2:%.*]] = icmp ule ptr [[TMP1]], [[ADD_PTR64]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP3:%.*]] = icmp ule ptr [[BOUND_PTR_ARITH]], [[TMP1]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND93:%.*]] = and i1 [[TMP3]], [[TMP2]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND93]], label [[CONT74:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND93]], label [[CONT74:%.*]], label [[TRAP]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: cont74: // CHECK-NEXT: store i32 1, ptr [[BOUND_PTR_ARITH]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[SUB80:%.*]] = add i32 [[N]], -2, {{!annotation ![0-9]+}} @@ -673,7 +673,7 @@ void elim_consecutive_writes2(int* __counted_by(n) dst, unsigned n, unsigned idx // CHECK-NEXT: [[OR_COND95:%.*]] = and i1 [[TMP5]], [[TMP6]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP7:%.*]] = icmp uge ptr [[ARRAYIDX82]], [[BOUND_PTR_ARITH]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND96:%.*]] = and i1 [[TMP7]], [[OR_COND95]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND96]], label [[CONT89:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND96]], label [[CONT89:%.*]], label [[TRAP]], !prof [[PROF11]], {{!annotation ![0-9]+}} // CHECK: cont89: // CHECK-NEXT: store i32 1, ptr [[ARRAYIDX82]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: br label [[RETURN]] @@ -726,7 +726,7 @@ void ptrinc0(char *__counted_by(inLen) buf, // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[CURRENTBUF_SROA_0_05]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP1:%.*]] = icmp uge ptr [[CURRENTBUF_SROA_0_05]], [[BUF]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TMP0]], [[TMP1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT1]], label [[TRAP:%.*]], !prof [[PROF36:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) {{#[0-9]+}}, {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -778,7 +778,7 @@ void ptrinc1(char *__counted_by(inLen) buf, // CHECK-NEXT: [[IDX_EXT_LE:%.*]] = zext i32 [[TABLE_SIZE]] to i64 // CHECK-NEXT: [[ADD_PTR_LE:%.*]] = getelementptr inbounds nuw i32, ptr [[TABLE]], i64 [[IDX_EXT_LE]] // CHECK-NEXT: [[DOTNOT33:%.*]] = icmp ult ptr [[BOUND_PTR_ARITH_LE]], [[TABLE]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[DOTNOT33]], label [[TRAP:%.*]], label [[RETURN]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[DOTNOT33]], label [[TRAP:%.*]], label [[RETURN]], !prof [[PROF30]], {{!annotation ![0-9]+}} // CHECK: return: // CHECK-NEXT: [[RETVAL_SROA_4_3:%.*]] = phi ptr [ null, [[ENTRY:%.*]] ], [ [[ADD_PTR_LE]], [[IF_THEN5]] ], [ null, [[FOR_COND]] ] // CHECK-NEXT: [[RETVAL_SROA_0_3:%.*]] = phi ptr [ null, [[ENTRY]] ], [ [[BOUND_PTR_ARITH_LE]], [[IF_THEN5]] ], [ null, [[FOR_COND]] ] diff --git a/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-minus-assign.c b/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-minus-assign.c index 6e1aaabb9eaf2..ba456d6644dfd 100644 --- a/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-minus-assign.c +++ b/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-minus-assign.c @@ -20,7 +20,7 @@ int main() { // CHECK: define{{.*}} i32 @foo({{.*}}) // ... // CHECK: %[[UGE_RES:[0-9]+]] = icmp uge i64 {{%.*}}, {{%.*}}, !annotation ![[ANNOT_NEW_IDX_GE_OLD:[0-9]+]] -// CHECK: br i1 %[[UGE_RES]], label %{{[a-z0-9]+}}, label %[[LABEL_TRAP:[a-z0-9]+]], !annotation ![[ANNOT_NEW_IDX_GE_OLD]] +// CHECK: br i1 %[[UGE_RES]], label %{{[a-z0-9]+}}, label %[[LABEL_TRAP:[a-z0-9]+]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[ANNOT_NEW_IDX_GE_OLD]] // CHECK: [[LABEL_TRAP]] // CHECK-NEXT: call void @llvm.ubsantrap{{.*}} !annotation ![[ANNOT_NEW_IDX_GE_OLD]] // ... diff --git a/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-plus-assign-unsigned.c b/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-plus-assign-unsigned.c index 85314f2b3ddb1..ad4fc65979738 100644 --- a/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-plus-assign-unsigned.c +++ b/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-plus-assign-unsigned.c @@ -20,7 +20,7 @@ int main() { // CHECK-LABEL: @foo // ... // CHECK: %[[UGE_RES:[0-9]+]] = icmp uge i64 {{%.*}}, {{%.*}}, !annotation ![[ANNOT_NEW_IDX_GE_OLD:[0-9]+]] -// CHECK: br i1 %[[UGE_RES]], label %{{[a-z0-9]+}}, label %[[LABEL_TRAP:[a-z0-9]+]], !annotation ![[ANNOT_NEW_IDX_GE_OLD]] +// CHECK: br i1 %[[UGE_RES]], label %{{[a-z0-9]+}}, label %[[LABEL_TRAP:[a-z0-9]+]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[ANNOT_NEW_IDX_GE_OLD]] // CHECK: [[LABEL_TRAP]] // CHECK-NEXT: call void @llvm.ubsantrap{{.*}} !annotation ![[ANNOT_NEW_IDX_GE_OLD]] // ... diff --git a/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-plus-assign.c b/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-plus-assign.c index 3c230cf801d12..e22e1e143336f 100644 --- a/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-plus-assign.c +++ b/clang/test/BoundsSafety/CodeGen/runtime-checks/indexable-ptr-plus-assign.c @@ -20,7 +20,7 @@ int main() { // CHECK: define{{.*}} i32 @foo({{.*}}) // ... // CHECK: %[[UGE_RES:[0-9]+]] = icmp uge i64 {{%.*}}, {{%.*}}, !annotation ![[ANNOT_NEW_IDX_GE_OLD:[0-9]+]] -// CHECK: br i1 %[[UGE_RES]], label %{{[a-z0-9]+}}, label %[[LABEL_TRAP:[a-z0-9]+]], !annotation ![[ANNOT_NEW_IDX_GE_OLD]] +// CHECK: br i1 %[[UGE_RES]], label %{{[a-z0-9]+}}, label %[[LABEL_TRAP:[a-z0-9]+]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation ![[ANNOT_NEW_IDX_GE_OLD]] // CHECK: [[LABEL_TRAP]] // CHECK-NEXT: call void @llvm.ubsantrap{{.*}} !annotation ![[ANNOT_NEW_IDX_GE_OLD]] // ... diff --git a/clang/test/BoundsSafety/CodeGen/runtime-checks/length-check-bound-check-removal.c b/clang/test/BoundsSafety/CodeGen/runtime-checks/length-check-bound-check-removal.c index 457c6d12cbcc9..8a8b032436764 100644 --- a/clang/test/BoundsSafety/CodeGen/runtime-checks/length-check-bound-check-removal.c +++ b/clang/test/BoundsSafety/CodeGen/runtime-checks/length-check-bound-check-removal.c @@ -59,12 +59,12 @@ int access1(S *p) { // CHECK-NEXT: [[TMP3:%.*]] = icmp ult ptr [[BOUND_PTR_ARITH]], [[ADD_PTR]], !annotation [[META12:![0-9]+]] // CHECK-NEXT: [[TMP4:%.*]] = icmp uge ptr [[BOUND_PTR_ARITH]], [[TMP1]], !annotation [[META13:![0-9]+]] // CHECK-NEXT: [[OR_COND35:%.*]] = and i1 [[TMP3]], [[TMP4]], !annotation [[META13]] -// CHECK-NEXT: br i1 [[OR_COND35]], label [[CONT22:%.*]], label [[TRAP:%.*]], !annotation [[META12]] +// CHECK-NEXT: br i1 [[OR_COND35]], label [[CONT22:%.*]], label [[TRAP:%.*]], !prof [[PROF14:![0-9]+]], !annotation [[META12]] // CHECK: cont22: -// CHECK-NEXT: [[DOTNOT39:%.*]] = icmp eq ptr [[BOUND_PTR_ARITH14]], null, !annotation [[META14:![0-9]+]] +// CHECK-NEXT: [[DOTNOT39:%.*]] = icmp eq ptr [[BOUND_PTR_ARITH14]], null, !annotation [[META15:![0-9]+]] // CHECK-NEXT: [[TMP5:%.*]] = icmp ult ptr [[BOUND_PTR_ARITH14]], [[ADD_PTR]], !annotation [[META12]] // CHECK-NEXT: [[OR_COND40:%.*]] = select i1 [[DOTNOT39]], i1 true, i1 [[TMP5]], !annotation [[META12]] -// CHECK-NEXT: br i1 [[OR_COND40]], label [[CONT32:%.*]], label [[TRAP]], !annotation [[META14]] +// CHECK-NEXT: br i1 [[OR_COND40]], label [[CONT32:%.*]], label [[TRAP]], !prof [[PROF16:![0-9]+]], !annotation [[META15]] // CHECK: cont32: // CHECK-NEXT: [[TMP6:%.*]] = load i32, ptr [[BOUND_PTR_ARITH]], align 4, !tbaa [[TBAA10]] // CHECK-NEXT: tail call void @use(ptr noundef [[BOUND_PTR_ARITH14]], i32 noundef [[TMP6]]) #[[ATTR3]] diff --git a/clang/test/BoundsSafety/CodeGen/runtime-checks/oob-member-expr.c b/clang/test/BoundsSafety/CodeGen/runtime-checks/oob-member-expr.c index d8c91605aa865..03bc2ee3e3a9f 100644 --- a/clang/test/BoundsSafety/CodeGen/runtime-checks/oob-member-expr.c +++ b/clang/test/BoundsSafety/CodeGen/runtime-checks/oob-member-expr.c @@ -19,10 +19,10 @@ struct S { // O2-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[S]], i64 16 // O2-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[S]], i64 24 // O2-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[TMP1]], [[TMP0]], !annotation [[META2:![0-9]+]] -// O2-NEXT: br i1 [[DOTNOT]], label %[[TRAP:.*]], label %[[CONT9:.*]], !annotation [[META2]] +// O2-NEXT: br i1 [[DOTNOT]], label %[[TRAP:.*]], label %[[CONT9:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // O2: [[TRAP]]: -// O2-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], !annotation [[META3:![0-9]+]] -// O2-NEXT: unreachable, !annotation [[META3]] +// O2-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], !annotation [[META4:![0-9]+]] +// O2-NEXT: unreachable, !annotation [[META4]] // O2: [[CONT9]]: // O2-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[S]]) #[[ATTR3]] // O2-NEXT: ret void @@ -75,16 +75,16 @@ struct S { // O0-NEXT: [[WIDE_PTR_LB8:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR7]], align 8 // O0-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_S]], ptr [[WIDE_PTR_PTR4]], i64 1 // O0-NEXT: [[TMP11:%.*]] = icmp ule ptr [[TMP10]], [[WIDE_PTR_UB6]], !annotation [[META2:![0-9]+]] -// O0-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// O0-NEXT: br i1 [[TMP11]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // O0: [[TRAP]]: // O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // O0-NEXT: unreachable, !annotation [[META2]] // O0: [[CONT]]: -// O0-NEXT: [[TMP12:%.*]] = icmp ule ptr [[WIDE_PTR_LB8]], [[WIDE_PTR_PTR4]], !annotation [[META3:![0-9]+]] -// O0-NEXT: br i1 [[TMP12]], label %[[CONT10:.*]], label %[[TRAP9:.*]], !annotation [[META3]] +// O0-NEXT: [[TMP12:%.*]] = icmp ule ptr [[WIDE_PTR_LB8]], [[WIDE_PTR_PTR4]], !annotation [[META4:![0-9]+]] +// O0-NEXT: br i1 [[TMP12]], label %[[CONT10:.*]], label %[[TRAP9:.*]], !prof [[PROF3]], !annotation [[META4]] // O0: [[TRAP9]]: -// O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// O0-NEXT: unreachable, !annotation [[META3]] +// O0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// O0-NEXT: unreachable, !annotation [[META4]] // O0: [[CONT10]]: // O0-NEXT: [[I11:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[WIDE_PTR_PTR4]], i32 0, i32 1 // O0-NEXT: store i64 3, ptr [[I11]], align 8 @@ -97,9 +97,12 @@ bingo:; sp->i = 3; // run-time trap : oob } +//. // O2: [[META2]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// O2: [[META3]] = !{!"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} +// O2: [[PROF3]] = !{!"branch_weights", i32 8191, i32 -8192} +// O2: [[META4]] = !{!"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound"} //. // O0: [[META2]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// O0: [[META3]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// O0: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// O0: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/sized_by_or_null_call-O2.c b/clang/test/BoundsSafety/CodeGen/sized_by_or_null_call-O2.c index 324d30b07dbb0..7799147f91326 100644 --- a/clang/test/BoundsSafety/CodeGen/sized_by_or_null_call-O2.c +++ b/clang/test/BoundsSafety/CodeGen/sized_by_or_null_call-O2.c @@ -112,7 +112,7 @@ void caller_6(int *__sized_by(len) p, int len) { // CHECK-NEXT: [[CMP65:%.*]] = icmp sge i64 [[SUB_PTR_SUB]], [[CONV]], !annotation [[META3]] // CHECK-NEXT: [[CMP68:%.*]] = icmp sgt i32 [[LEN]], -1, !annotation [[META3]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP68]], [[CMP65]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label [[CONT]], label [[TRAP]], !annotation [[META3]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label [[CONT]], label [[TRAP]], !prof [[PROF13:![0-9]+]], !annotation [[META3]] // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META3]] // CHECK-NEXT: unreachable, !annotation [[META3]] @@ -130,7 +130,7 @@ void caller_7(int *__bidi_indexable p, int len) { // CHECK-NEXT: [[TOBOOL_NOT:%.*]] = icmp eq ptr [[P]], null, !annotation [[META3]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = icmp ult i32 [[LEN]], 5 // CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[TOBOOL_NOT]], [[SPEC_SELECT]], !annotation [[META3]] -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT:%.*]], label [[TRAP:%.*]], !annotation [[META3]] +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF14:![0-9]+]], !annotation [[META3]] // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META3]] // CHECK-NEXT: unreachable, !annotation [[META3]] @@ -160,9 +160,9 @@ void caller_9(int *__sized_by(*len) *out, int *len){ // CHECK-NEXT: [[COUNT:%.*]] = alloca i32, align 4 // CHECK-NEXT: [[P:%.*]] = alloca ptr, align 8 // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[COUNT]]) #[[ATTR5]] -// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 4, !annotation [[META13:![0-9]+]] +// CHECK-NEXT: store i32 0, ptr [[COUNT]], align 4, !annotation [[META15:![0-9]+]] // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[P]]) #[[ATTR5]] -// CHECK-NEXT: store ptr null, ptr [[P]], align 8, !annotation [[META13]] +// CHECK-NEXT: store ptr null, ptr [[P]], align 8, !annotation [[META15]] // CHECK-NEXT: call void @bar(ptr noundef nonnull [[P]], ptr noundef nonnull [[COUNT]]) #[[ATTR5]] // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[TBAA8]] // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ne ptr [[TMP0]], null, !annotation [[META2]] @@ -171,15 +171,15 @@ void caller_9(int *__sized_by(*len) *out, int *len){ // CHECK-NEXT: [[CMP_NOT:%.*]] = select i1 [[DOTNOT]], i1 [[CMP_NOT90]], i1 false, !annotation [[META3]] // CHECK-NEXT: br i1 [[CMP_NOT]], label [[TRAP:%.*]], label [[LAND_RHS:%.*]], !annotation [[META3]] // CHECK: trap: -// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META14:![0-9]+]] -// CHECK-NEXT: unreachable, !annotation [[META14]] +// CHECK-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR6]], !annotation [[META16:![0-9]+]] +// CHECK-NEXT: unreachable, !annotation [[META16]] // CHECK: land.rhs: // CHECK-NEXT: br i1 [[DOTNOT]], label [[LOR_RHS:%.*]], label [[CONT67:%.*]], !annotation [[META3]] // CHECK: lor.rhs: // CHECK-NEXT: [[CMP61:%.*]] = icmp sge i32 [[TMP1]], [[LEN]], !annotation [[META3]] // CHECK-NEXT: [[CMP64:%.*]] = icmp sgt i32 [[LEN]], -1, !annotation [[META3]] // CHECK-NEXT: [[SPEC_SELECT:%.*]] = and i1 [[CMP64]], [[CMP61]] -// CHECK-NEXT: br i1 [[SPEC_SELECT]], label [[CONT67]], label [[TRAP]], !annotation [[META3]] +// CHECK-NEXT: br i1 [[SPEC_SELECT]], label [[CONT67]], label [[TRAP]], !prof [[PROF13]], !annotation [[META3]] // CHECK: cont67: // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[P]]) #[[ATTR5]] // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[COUNT]]) #[[ATTR5]] @@ -206,6 +206,8 @@ int *__sized_by_or_null(len) caller_10(int len) { // CHECK: [[META10]] = !{!"any pointer", [[META6]], i64 0} // CHECK: [[META11]] = !{!"bounds-safety-generic", [[META12:![0-9]+]]} // CHECK: [[META12]] = !{!"bounds-safety-missed-optimization-nsw", !"Check can not be removed because the arithmetic operation might wrap in the signed sense. Optimize the check by adding conditions to check for overflow before doing the operation"} -// CHECK: [[META13]] = !{!"bounds-safety-zero-init"} -// CHECK: [[META14]] = !{!"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound", !"bounds-safety-generic"} +// CHECK: [[PROF13]] = !{!"branch_weights", i32 1048575, i32 1} +// CHECK: [[PROF14]] = !{!"branch_weights", i32 2097151, i32 1} +// CHECK: [[META15]] = !{!"bounds-safety-zero-init"} +// CHECK: [[META16]] = !{!"bounds-safety-check-ptr-lt-upper-bound", !"bounds-safety-check-ptr-ge-lower-bound", !"bounds-safety-generic"} //. diff --git a/clang/test/BoundsSafety/CodeGen/terminated-by-from-indexable-O2.c b/clang/test/BoundsSafety/CodeGen/terminated-by-from-indexable-O2.c index 3ecef62682143..e3d42603aaef4 100644 --- a/clang/test/BoundsSafety/CodeGen/terminated-by-from-indexable-O2.c +++ b/clang/test/BoundsSafety/CodeGen/terminated-by-from-indexable-O2.c @@ -8,7 +8,7 @@ // CHECK-LABEL: @indexable( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[PTR_COERCE0:%.*]], [[PTR_COERCE1:%.*]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TMP0]], label [[TERMINATED_BY_LOOP_COND:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TMP0]], label [[TERMINATED_BY_LOOP_COND:%.*]], label [[TRAP:%.*]], !prof [[PROF3:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2:[0-9]+]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -16,7 +16,7 @@ // CHECK-NEXT: [[TERMINATED_BY_CUR_0:%.*]] = phi ptr [ [[TERMINATED_BY_ONE_PAST_CUR:%.*]], [[CONT2:%.*]] ], [ [[PTR_COERCE0]], [[ENTRY:%.*]] ] // CHECK-NEXT: [[TERMINATED_BY_ONE_PAST_CUR]] = getelementptr inbounds nuw i8, ptr [[TERMINATED_BY_CUR_0]], i64 4, {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_ACCESS_NOT:%.*]] = icmp ugt ptr [[TERMINATED_BY_ONE_PAST_CUR]], [[PTR_COERCE1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_ACCESS_NOT]], label [[TRAP]], label [[CONT2]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_ACCESS_NOT]], label [[TRAP]], label [[CONT2]], !prof [[PROF6:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cont2: // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[TERMINATED_BY_CUR_0]], align 4 // CHECK-NEXT: [[TERMINATED_BY_CHECK_TERMINATOR:%.*]] = icmp eq i32 [[TMP1]], 0 @@ -38,7 +38,7 @@ int *__null_terminated indexable(int *__indexable ptr) { // CHECK-NEXT: [[DOTNOT:%.*]] = icmp uge ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[AGG_TEMP1_SROA_3_0_COPYLOAD]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[AGG_TEMP1_SROA_2_0_COPYLOAD]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[DOTNOT]], i1 [[TMP0]], i1 false, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[TERMINATED_BY_LOOP_COND:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[TERMINATED_BY_LOOP_COND:%.*]], label [[TRAP:%.*]], !prof [[PROF13:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -46,7 +46,7 @@ int *__null_terminated indexable(int *__indexable ptr) { // CHECK-NEXT: [[TERMINATED_BY_CUR_0:%.*]] = phi ptr [ [[TERMINATED_BY_ONE_PAST_CUR:%.*]], [[CONT8:%.*]] ], [ [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[ENTRY:%.*]] ] // CHECK-NEXT: [[TERMINATED_BY_ONE_PAST_CUR]] = getelementptr inbounds nuw i8, ptr [[TERMINATED_BY_CUR_0]], i64 4, {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_ACCESS_NOT:%.*]] = icmp ugt ptr [[TERMINATED_BY_ONE_PAST_CUR]], [[AGG_TEMP1_SROA_2_0_COPYLOAD]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_ACCESS_NOT]], label [[TRAP]], label [[CONT8]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_ACCESS_NOT]], label [[TRAP]], label [[CONT8]], !prof [[PROF6]], {{!annotation ![0-9]+}} // CHECK: cont8: // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[TERMINATED_BY_CUR_0]], align 4 // CHECK-NEXT: [[TERMINATED_BY_CHECK_TERMINATOR:%.*]] = icmp eq i32 [[TMP1]], 0 @@ -61,7 +61,7 @@ int *__null_terminated bidi_indexable(int *__bidi_indexable ptr) { // CHECK-LABEL: @nested_indexable( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[PTR_COERCE0:%.*]], [[PTR_COERCE1:%.*]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TMP0]], label [[TERMINATED_BY_LOOP_COND:%.*]], label [[TRAP:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TMP0]], label [[TERMINATED_BY_LOOP_COND:%.*]], label [[TRAP:%.*]], !prof [[PROF3]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -69,7 +69,7 @@ int *__null_terminated bidi_indexable(int *__bidi_indexable ptr) { // CHECK-NEXT: [[TERMINATED_BY_CUR_0:%.*]] = phi ptr [ [[TERMINATED_BY_ONE_PAST_CUR:%.*]], [[CONT2:%.*]] ], [ [[PTR_COERCE0]], [[ENTRY:%.*]] ] // CHECK-NEXT: [[TERMINATED_BY_ONE_PAST_CUR]] = getelementptr inbounds nuw i8, ptr [[TERMINATED_BY_CUR_0]], i64 8, {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_ACCESS_NOT:%.*]] = icmp ugt ptr [[TERMINATED_BY_ONE_PAST_CUR]], [[PTR_COERCE1]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_ACCESS_NOT]], label [[TRAP]], label [[CONT2]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_ACCESS_NOT]], label [[TRAP]], label [[CONT2]], !prof [[PROF6]], {{!annotation ![0-9]+}} // CHECK: cont2: // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TERMINATED_BY_CUR_0]], align 8 // CHECK-NEXT: [[TERMINATED_BY_CHECK_TERMINATOR:%.*]] = icmp eq ptr [[TMP1]], inttoptr (i64 -1 to ptr) diff --git a/clang/test/BoundsSafety/CodeGen/terminated-by-from-indexable-ptr-to-term-O2.c b/clang/test/BoundsSafety/CodeGen/terminated-by-from-indexable-ptr-to-term-O2.c index 58254ba53987f..450c92adade7d 100644 --- a/clang/test/BoundsSafety/CodeGen/terminated-by-from-indexable-ptr-to-term-O2.c +++ b/clang/test/BoundsSafety/CodeGen/terminated-by-from-indexable-ptr-to-term-O2.c @@ -8,7 +8,7 @@ // CHECK-LABEL: @indexable_indexable( // CHECK-NEXT: entry: // CHECK-NEXT: [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT:%.*]] = icmp ugt ptr [[PTR_COERCE0:%.*]], [[PTR_TO_TERM_COERCE0:%.*]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT]], label [[TRAP:%.*]], label [[CONT:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT]], label [[TRAP:%.*]], label [[CONT:%.*]], !prof [[PROF3:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2:[0-9]+]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -17,11 +17,11 @@ // CHECK-NEXT: [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_OVERFLOW:%.*]] = icmp ugt ptr [[TERMINATED_BY_ONE_PAST_TERM_PTR]], [[PTR_TO_TERM_COERCE0]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_LE_UPPER:%.*]] = icmp ule ptr [[TERMINATED_BY_ONE_PAST_TERM_PTR]], [[PTR_COERCE1:%.*]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_OVERFLOW]], [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_LE_UPPER]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT7:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT7:%.*]], label [[TRAP]], !prof [[PROF7:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cont7: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR_TO_TERM_COERCE0]], align 4, {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_TERMINATOR:%.*]] = icmp eq i32 [[TMP0]], 0, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_TERMINATOR]], label [[CONT8:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_TERMINATOR]], label [[CONT8:%.*]], label [[TRAP]], !prof [[PROF9:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cont8: // CHECK-NEXT: ret ptr [[PTR_COERCE0]] // @@ -37,7 +37,7 @@ int *__null_terminated indexable_indexable(int *__indexable ptr, int *__indexabl // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ult ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[AGG_TEMP1_SROA_3_0_COPYLOAD]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[PTR_TO_TERM:%.*]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND10:%.*]] = or i1 [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT]], [[DOTNOT]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND10]], label [[TRAP:%.*]], label [[CONT6:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND10]], label [[TRAP:%.*]], label [[CONT6:%.*]], !prof [[PROF16:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -48,11 +48,11 @@ int *__null_terminated indexable_indexable(int *__indexable ptr, int *__indexabl // CHECK-NEXT: [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_OVERFLOW:%.*]] = icmp ugt ptr [[TERMINATED_BY_ONE_PAST_TERM_PTR]], [[PTR_TO_TERM]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_LE_UPPER:%.*]] = icmp ule ptr [[TERMINATED_BY_ONE_PAST_TERM_PTR]], [[AGG_TEMP1_SROA_2_0_COPYLOAD]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_OVERFLOW]], i1 [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_LE_UPPER]], i1 false, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT8:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT8:%.*]], label [[TRAP]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: cont8: // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR_TO_TERM]], align 4, {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_TERMINATOR:%.*]] = icmp eq i32 [[TMP0]], 0, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_TERMINATOR]], label [[CONT9:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_TERMINATOR]], label [[CONT9:%.*]], label [[TRAP]], !prof [[PROF9]], {{!annotation ![0-9]+}} // CHECK: cont9: // CHECK-NEXT: ret ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]] // @@ -63,7 +63,7 @@ int *__null_terminated bidi_indexable_single(int *__bidi_indexable ptr, int *__s // CHECK-LABEL: @nested_indexable_indexable( // CHECK-NEXT: entry: // CHECK-NEXT: [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT:%.*]] = icmp ugt ptr [[PTR_COERCE0:%.*]], [[PTR_TO_TERM_COERCE0:%.*]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT]], label [[TRAP:%.*]], label [[CONT:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT]], label [[TRAP:%.*]], label [[CONT:%.*]], !prof [[PROF3]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -72,11 +72,11 @@ int *__null_terminated bidi_indexable_single(int *__bidi_indexable ptr, int *__s // CHECK-NEXT: [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_OVERFLOW:%.*]] = icmp ugt ptr [[TERMINATED_BY_ONE_PAST_TERM_PTR]], [[PTR_TO_TERM_COERCE0]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_LE_UPPER:%.*]] = icmp ule ptr [[TERMINATED_BY_ONE_PAST_TERM_PTR]], [[PTR_COERCE1:%.*]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = and i1 [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_OVERFLOW]], [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_LE_UPPER]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT7:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT7:%.*]], label [[TRAP]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: cont7: // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_TO_TERM_COERCE0]], align 8, {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_TERMINATOR:%.*]] = icmp eq ptr [[TMP0]], inttoptr (i64 -1 to ptr), {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_TERMINATOR]], label [[CONT8:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_TERMINATOR]], label [[CONT8:%.*]], label [[TRAP]], !prof [[PROF9]], {{!annotation ![0-9]+}} // CHECK: cont8: // CHECK-NEXT: ret ptr [[PTR_COERCE0]] // @@ -92,7 +92,7 @@ int *__single *__terminated_by(-1) nested_indexable_indexable(int *__single *__i // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ult ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[AGG_TEMP1_SROA_3_0_COPYLOAD]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT:%.*]] = icmp ugt ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]], [[PTR_TO_TERM:%.*]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND10:%.*]] = or i1 [[TERMINATED_BY_CHECK_PTR_LE_TERM_PTR_NOT]], [[DOTNOT]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND10]], label [[TRAP:%.*]], label [[CONT6:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND10]], label [[TRAP:%.*]], label [[CONT6:%.*]], !prof [[PROF16]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR2]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} @@ -103,11 +103,11 @@ int *__single *__terminated_by(-1) nested_indexable_indexable(int *__single *__i // CHECK-NEXT: [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_OVERFLOW:%.*]] = icmp ugt ptr [[TERMINATED_BY_ONE_PAST_TERM_PTR]], [[PTR_TO_TERM]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_LE_UPPER:%.*]] = icmp ule ptr [[TERMINATED_BY_ONE_PAST_TERM_PTR]], [[AGG_TEMP1_SROA_2_0_COPYLOAD]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_OVERFLOW]], i1 [[TERMINATED_BY_CHECK_ONE_PAST_TERM_PTR_LE_UPPER]], i1 false, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT8:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[CONT8:%.*]], label [[TRAP]], !prof [[PROF7]], {{!annotation ![0-9]+}} // CHECK: cont8: // CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_TO_TERM]], align 8, {{!annotation ![0-9]+}} // CHECK-NEXT: [[TERMINATED_BY_CHECK_TERMINATOR:%.*]] = icmp eq ptr [[TMP0]], inttoptr (i64 -1 to ptr), {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_TERMINATOR]], label [[CONT9:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[TERMINATED_BY_CHECK_TERMINATOR]], label [[CONT9:%.*]], label [[TRAP]], !prof [[PROF9]], {{!annotation ![0-9]+}} // CHECK: cont9: // CHECK-NEXT: ret ptr [[AGG_TEMP1_SROA_0_0_COPYLOAD]] // diff --git a/clang/test/BoundsSafety/CodeGen/trap-function-returns-O2.c b/clang/test/BoundsSafety/CodeGen/trap-function-returns-O2.c index 7e86e817da83f..4abbf4260350a 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-function-returns-O2.c +++ b/clang/test/BoundsSafety/CodeGen/trap-function-returns-O2.c @@ -9,21 +9,21 @@ // X86_64-NEXT: entry: // X86_64-NEXT: [[IDX_EXT:%.*]] = zext i32 [[COUNT]] to i64 // X86_64-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[BAR]], i64 [[IDX_EXT]] -// X86_64-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[BAR]], i64 4 -// X86_64-NEXT: [[TMP1:%.*]] = icmp ult ptr [[TMP0]], [[ADD_PTR]], !annotation [[META2:![0-9]+]] -// X86_64-NEXT: br i1 [[TMP1]], label [[CONT:%.*]], label [[TRAP:%.*]], !annotation [[META2]] +// X86_64-NEXT: [[ARRAYIDX:%.*]] = getelementptr i8, ptr [[BAR]], i64 4 +// X86_64-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[ADD_PTR]], !annotation [[META2:![0-9]+]] +// X86_64-NEXT: br i1 [[TMP0]], label [[CONT:%.*]], label [[TRAP:%.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // X86_64: trap: // X86_64-NEXT: tail call void @fb_trap(i8 25) #[[ATTR1:[0-9]+]], !annotation [[META2]] // X86_64-NEXT: br label [[CONT]], !annotation [[META2]] // X86_64: cont: -// X86_64-NEXT: [[DOTNOT:%.*]] = icmp ult ptr [[TMP0]], [[BAR]], !annotation [[META3:![0-9]+]] -// X86_64-NEXT: br i1 [[DOTNOT]], label [[TRAP1:%.*]], label [[CONT2:%.*]], !annotation [[META3]] +// X86_64-NEXT: [[DOTNOT:%.*]] = icmp ult ptr [[ARRAYIDX]], [[BAR]], !annotation [[META4:![0-9]+]] +// X86_64-NEXT: br i1 [[DOTNOT]], label [[TRAP1:%.*]], label [[CONT2:%.*]], !prof [[PROF5:![0-9]+]], !annotation [[META4]] // X86_64: trap1: -// X86_64-NEXT: tail call void @fb_trap(i8 25) #[[ATTR1]], !annotation [[META3]] -// X86_64-NEXT: br label [[CONT2]], !annotation [[META3]] +// X86_64-NEXT: tail call void @fb_trap(i8 25) #[[ATTR1]], !annotation [[META4]] +// X86_64-NEXT: br label [[CONT2]], !annotation [[META4]] // X86_64: cont2: -// X86_64-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 4, !tbaa [[TBAA4:![0-9]+]] -// X86_64-NEXT: ret i32 [[TMP2]] +// X86_64-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA6:![0-9]+]] +// X86_64-NEXT: ret i32 [[TMP1]] // int foo(int *__counted_by(count) bar, unsigned count) { return bar[1]; diff --git a/clang/test/BoundsSafety/CodeGen/trap-reasons/general_trap-O0.c b/clang/test/BoundsSafety/CodeGen/trap-reasons/general_trap-O0.c index 8f876d27be9cf..99fad1059506a 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-reasons/general_trap-O0.c +++ b/clang/test/BoundsSafety/CodeGen/trap-reasons/general_trap-O0.c @@ -37,6 +37,6 @@ void use(int *__indexable buf) { // CHECK: br i1 %{{.+}}, label %{{.+}}, label %{{.+}} !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] // CHECK: br i1 %{{.+}}, label %{{.+}}, label %{{.+}} !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] // CHECK: br i1 %{{.+}}, label %{{.+}}, label %{{.+}} !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9.]+]], !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9.]+]], !dbg [[SRC_LOC]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation [[OPT_REMARK]] // CHECK: [[TRAP_LABEL]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC]] diff --git a/clang/test/BoundsSafety/CodeGen/trap-reasons/indexable_ptr_new_lt_old-O0.c b/clang/test/BoundsSafety/CodeGen/trap-reasons/indexable_ptr_new_lt_old-O0.c index a97d19defa62e..0e53a7e185b27 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-reasons/indexable_ptr_new_lt_old-O0.c +++ b/clang/test/BoundsSafety/CodeGen/trap-reasons/indexable_ptr_new_lt_old-O0.c @@ -25,6 +25,6 @@ int* shift(int* __indexable i, int offset) { // In second copy of the file // CHECK-LABEL: @shift -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation [[OPT_REMARK]] // CHECK: [[TRAP_LABEL]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC]] diff --git a/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_ge_upper_bound-addr_of_struct_member-O0.c b/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_ge_upper_bound-addr_of_struct_member-O0.c index 9c65907d12c24..fab6e75649132 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_ge_upper_bound-addr_of_struct_member-O0.c +++ b/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_ge_upper_bound-addr_of_struct_member-O0.c @@ -35,6 +35,6 @@ int* TYPE operation(Data_t* TYPE d) { // CHECK-LABEL: @operation // Note: We use the `OPT_REMARK` to make sure we match against the correct branch. // Unfortunately `SRC_LOC` is not enough because it isn't unique. -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation [[OPT_REMARK]] // CHECK: [[TRAP_LABEL]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC]] diff --git a/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_ge_upper_bound-terminated_by_from_indexable-O0.c b/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_ge_upper_bound-terminated_by_from_indexable-O0.c index 112ebce94a3f3..523c5d380f5bd 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_ge_upper_bound-terminated_by_from_indexable-O0.c +++ b/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_ge_upper_bound-terminated_by_from_indexable-O0.c @@ -26,7 +26,7 @@ void convert(const char* __indexable str) { // CHECK-LABEL: @convert // Note: We use the `OPT_REMARK` to make sure we match against the correct branch. // Unfortunately `SRC_LOC` is not enough because it isn't unique. -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation [[OPT_REMARK]] // CHECK: [[TRAP_LABEL]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC]] // CHECK: [[SRC_LOC]] = !DILocation(line: 9, column: 45, scope: {{![0-9]+}}) diff --git a/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_lt_lower_bound-addr_of_struct_member-O0.c b/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_lt_lower_bound-addr_of_struct_member-O0.c index f8477249bda4e..9c72984c03ca1 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_lt_lower_bound-addr_of_struct_member-O0.c +++ b/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_lt_lower_bound-addr_of_struct_member-O0.c @@ -27,6 +27,6 @@ int* __bidi_indexable operation(Data_t* __bidi_indexable d) { // CHECK-LABEL: @operation // Note: We use the `OPT_REMARK` to make sure we match against the correct branch. // Unfortunately `SRC_LOC` is not enough because it isn't unique. -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation [[OPT_REMARK]] // CHECK: [[TRAP_LABEL]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC]] diff --git a/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_lt_lower_bound-deref-member_access-O0.c b/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_lt_lower_bound-deref-member_access-O0.c index ddddcfe12f200..bd888e13a6ebe 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_lt_lower_bound-deref-member_access-O0.c +++ b/clang/test/BoundsSafety/CodeGen/trap-reasons/ptr_lt_lower_bound-deref-member_access-O0.c @@ -27,6 +27,6 @@ int operation(Data_t* __bidi_indexable d) { // CHECK-LABEL: @operation // Note: We use the `OPT_REMARK` to make sure we match against the correct branch. // Unfortunately `SRC_LOC` is not enough because it isn't unique. -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation [[OPT_REMARK]] // CHECK: [[TRAP_LABEL]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC]] diff --git a/clang/test/BoundsSafety/CodeGen/trap-reasons/terminated_by_from_indexable_bounds-O0.c b/clang/test/BoundsSafety/CodeGen/trap-reasons/terminated_by_from_indexable_bounds-O0.c index 168035cba4b5e..4d7d6ab7cbfb8 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-reasons/terminated_by_from_indexable_bounds-O0.c +++ b/clang/test/BoundsSafety/CodeGen/trap-reasons/terminated_by_from_indexable_bounds-O0.c @@ -36,14 +36,14 @@ void convert(const char* __indexable str) { // Note: We use the `OPT_REMARK` to make sure we match against the correct branch. // Unfortunately `SRC_LOC` is not enough because it isn't unique. -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL_0:[a-z0-9]+]], !dbg [[SRC_LOC_0]], !annotation [[OPT_REMARK_0]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL_0:[a-z0-9]+]], !dbg [[SRC_LOC_0]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation [[OPT_REMARK_0]] // CHECK: [[TRAP_LABEL_0]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC_0]] -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL_1:[a-z0-9]+]], !dbg [[SRC_LOC_1]], !annotation [[OPT_REMARK_1]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL_1:[a-z0-9]+]], !dbg [[SRC_LOC_1]], !prof ![[PROFILE_METADATA]], !annotation [[OPT_REMARK_1]] // CHECK: [[TRAP_LABEL_1]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC_1]] -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL_2:[a-z0-9]+]], !dbg [[SRC_LOC_2]], !annotation [[OPT_REMARK_2]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL_2:[a-z0-9]+]], !dbg [[SRC_LOC_2]], !prof ![[PROFILE_METADATA]], !annotation [[OPT_REMARK_2]] // CHECK: [[TRAP_LABEL_2]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC_2]] diff --git a/clang/test/BoundsSafety/CodeGen/trap-reasons/terminated_by_from_indexable_term-O0.c b/clang/test/BoundsSafety/CodeGen/trap-reasons/terminated_by_from_indexable_term-O0.c index aeabbc13fede1..53bccc55b1359 100644 --- a/clang/test/BoundsSafety/CodeGen/trap-reasons/terminated_by_from_indexable_term-O0.c +++ b/clang/test/BoundsSafety/CodeGen/trap-reasons/terminated_by_from_indexable_term-O0.c @@ -26,6 +26,6 @@ void convert(const char* __indexable str) { // CHECK-LABEL: @convert // Note: We use the `OPT_REMARK` to make sure we match against the correct branch. // Unfortunately `SRC_LOC` is not enough because it isn't unique. -// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !annotation [[OPT_REMARK]] +// CHECK: br i1 %{{.+}}, label %{{.+}}, label %[[TRAP_LABEL:[a-z0-9]+]], !dbg [[SRC_LOC]], !prof ![[PROFILE_METADATA:[0-9]+]], !annotation [[OPT_REMARK]] // CHECK: [[TRAP_LABEL]]: // CHECK-NEXT: call void @llvm.ubsantrap(i8 25) {{.*}}!dbg [[TRAP_LOC]] diff --git a/clang/test/BoundsSafety/CodeGen/ubsan/ptr-arithmetic-struct.c b/clang/test/BoundsSafety/CodeGen/ubsan/ptr-arithmetic-struct.c index 58315b1ebb153..ce9bd904d3e8f 100644 --- a/clang/test/BoundsSafety/CodeGen/ubsan/ptr-arithmetic-struct.c +++ b/clang/test/BoundsSafety/CodeGen/ubsan/ptr-arithmetic-struct.c @@ -21,7 +21,7 @@ int main() { struct foo *ptr = &arr[v + 1]; // RECOVER: call void @__ubsan_handle_out_of_bounds -// TRAP: br {{.*}} label %[[LABEL_TRAP:[a-z0-9]+]], !nosanitize +// TRAP: br {{.*}} label %[[LABEL_TRAP:[a-z0-9]+]], !prof ![[PROFILE_METADATA:[0-9]+]], !nosanitize // TRAP: [[LABEL_TRAP]]: // TRAP-NEXT: call void @llvm.ubsantrap(i8 {{.*}}) #{{.*}}, !nosanitize diff --git a/clang/test/BoundsSafety/CodeGen/ubsan/ptr-arithmetic.c b/clang/test/BoundsSafety/CodeGen/ubsan/ptr-arithmetic.c index 04c5c592a76aa..df017b2de65ec 100644 --- a/clang/test/BoundsSafety/CodeGen/ubsan/ptr-arithmetic.c +++ b/clang/test/BoundsSafety/CodeGen/ubsan/ptr-arithmetic.c @@ -17,7 +17,7 @@ int main() { int *ptr = &arr[v]; // RECOVER: call void @__ubsan_handle_out_of_bounds -// TRAP: br {{.*}} label %[[LABEL_TRAP:[a-z0-9]+]], !nosanitize +// TRAP: br {{.*}} label %[[LABEL_TRAP:[a-z0-9]+]], !prof ![[PROFILE_METADATA:[0-9]+]], !nosanitize // TRAP: [[LABEL_TRAP]]: // TRAP-NEXT: call void @llvm.ubsantrap(i8 {{.*}}) #{{.*}}, !nosanitize diff --git a/clang/test/BoundsSafety/CodeGen/unique-trap-blocks-O0-O2-opt-disabled.c b/clang/test/BoundsSafety/CodeGen/unique-trap-blocks-O0-O2-opt-disabled.c index b4147558c4236..6f452255250c8 100644 --- a/clang/test/BoundsSafety/CodeGen/unique-trap-blocks-O0-O2-opt-disabled.c +++ b/clang/test/BoundsSafety/CodeGen/unique-trap-blocks-O0-O2-opt-disabled.c @@ -31,18 +31,18 @@ int consume(int* __bidi_indexable ptr, int idx) { // OPT0-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // OPT0-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // OPT0-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META2:![0-9]+]] -// OPT0-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] +// OPT0-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF3:![0-9]+]], !annotation [[META2]] // OPT0: [[TRAP]]: // OPT0-NEXT: call void asm sideeffect "", "n"(i64 0), !annotation [[META2]] // OPT0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META2]] // OPT0-NEXT: unreachable, !annotation [[META2]] // OPT0: [[CONT]]: -// OPT0-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META3:![0-9]+]] -// OPT0-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META3]] +// OPT0-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META4:![0-9]+]] +// OPT0-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF3]], !annotation [[META4]] // OPT0: [[TRAP1]]: -// OPT0-NEXT: call void asm sideeffect "", "n"(i64 1), !annotation [[META3]] -// OPT0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META3]] -// OPT0-NEXT: unreachable, !annotation [[META3]] +// OPT0-NEXT: call void asm sideeffect "", "n"(i64 1), !annotation [[META4]] +// OPT0-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META4]] +// OPT0-NEXT: unreachable, !annotation [[META4]] // OPT0: [[CONT2]]: // OPT0-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 // OPT0-NEXT: ret i32 [[TMP3]] @@ -67,25 +67,26 @@ int consume(int* __bidi_indexable ptr, int idx) { // OPT2-NEXT: [[WIDE_PTR_LB_ADDR:%.*]] = getelementptr inbounds nuw %"__bounds_safety::wide_ptr.bidi_indexable", ptr [[AGG_TEMP]], i32 0, i32 2 // OPT2-NEXT: [[WIDE_PTR_LB:%.*]] = load ptr, ptr [[WIDE_PTR_LB_ADDR]], align 8 // OPT2-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[WIDE_PTR_UB]], !annotation [[META13:![0-9]+]] -// OPT2-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META13]] +// OPT2-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF14:![0-9]+]], !annotation [[META13]] // OPT2: [[TRAP]]: // OPT2-NEXT: call void asm sideeffect "", "n"(i64 0), !annotation [[META13]] // OPT2-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], !annotation [[META13]] // OPT2-NEXT: unreachable, !annotation [[META13]] // OPT2: [[CONT]]: -// OPT2-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META14:![0-9]+]] -// OPT2-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !annotation [[META14]] +// OPT2-NEXT: [[TMP2:%.*]] = icmp uge ptr [[ARRAYIDX]], [[WIDE_PTR_LB]], !annotation [[META15:![0-9]+]] +// OPT2-NEXT: br i1 [[TMP2]], label %[[CONT2:.*]], label %[[TRAP1:.*]], !prof [[PROF14]], !annotation [[META15]] // OPT2: [[TRAP1]]: -// OPT2-NEXT: call void asm sideeffect "", "n"(i64 1), !annotation [[META14]] -// OPT2-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META14]] -// OPT2-NEXT: unreachable, !annotation [[META14]] +// OPT2-NEXT: call void asm sideeffect "", "n"(i64 1), !annotation [[META15]] +// OPT2-NEXT: call void @llvm.ubsantrap(i8 25) #[[ATTR3]], !annotation [[META15]] +// OPT2-NEXT: unreachable, !annotation [[META15]] // OPT2: [[CONT2]]: // OPT2-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA8]] // OPT2-NEXT: ret i32 [[TMP3]] // //. // OPT0: [[META2]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// OPT0: [[META3]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// OPT0: [[PROF3]] = !{!"branch_weights", i32 1048575, i32 1} +// OPT0: [[META4]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. // OPT2: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0} // OPT2: [[META3]] = !{!"p2 int", [[META4:![0-9]+]], i64 0} @@ -99,5 +100,6 @@ int consume(int* __bidi_indexable ptr, int idx) { // OPT2: [[META11]] = !{[[META12:![0-9]+]], [[META12]], i64 0} // OPT2: [[META12]] = !{!"p1 int", [[META5]], i64 0} // OPT2: [[META13]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// OPT2: [[META14]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} +// OPT2: [[PROF14]] = !{!"branch_weights", i32 1048575, i32 1} +// OPT2: [[META15]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} //. diff --git a/clang/test/BoundsSafety/CodeGen/unique-trap-blocks-O2.c b/clang/test/BoundsSafety/CodeGen/unique-trap-blocks-O2.c index df22e99daaabc..134094fed2836 100644 --- a/clang/test/BoundsSafety/CodeGen/unique-trap-blocks-O2.c +++ b/clang/test/BoundsSafety/CodeGen/unique-trap-blocks-O2.c @@ -25,89 +25,5 @@ int consume(int* __bidi_indexable ptr, int* __bidi_indexable ptr2, int idx) { int other = i_want_to_be_inlined(ptr2, idx); return ptr[idx]; } -// CHECK-LABEL: define i32 @i_want_to_be_inlined( -// CHECK-SAME: ptr noundef readonly captures(none) [[PTR:%.*]], i32 noundef [[IDX:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[AGG_TEMP_SROA_0_0_COPYLOAD:%.*]] = load ptr, ptr [[PTR]], align 8 -// CHECK-NEXT: [[AGG_TEMP_SROA_2_0_PTR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 -// CHECK-NEXT: [[AGG_TEMP_SROA_2_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_PTR_SROA_IDX]], align 8 -// CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX]] to i64 -// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i32, ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], i64 [[IDXPROM]] -// CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX]], [[AGG_TEMP_SROA_2_0_COPYLOAD]], !annotation [[META2:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] -// CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void asm sideeffect "", "n"(i64 0) #[[ATTR3:[0-9]+]], !annotation [[META2]] -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4:[0-9]+]], !annotation [[META2]] -// CHECK-NEXT: unreachable, !annotation [[META2]] -// CHECK: [[CONT]]: -// CHECK-NEXT: [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: [[AGG_TEMP_SROA_3_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA3:![0-9]+]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ult ptr [[ARRAYIDX]], [[AGG_TEMP_SROA_3_0_COPYLOAD]], !annotation [[META8:![0-9]+]] -// CHECK-NEXT: br i1 [[DOTNOT]], label %[[TRAP1:.*]], label %[[CONT2:.*]], !annotation [[META8]] -// CHECK: [[TRAP1]]: -// CHECK-NEXT: tail call void asm sideeffect "", "n"(i64 1) #[[ATTR3]], !annotation [[META8]] -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META8]] -// CHECK-NEXT: unreachable, !annotation [[META8]] -// CHECK: [[CONT2]]: -// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA9:![0-9]+]] -// CHECK-NEXT: ret i32 [[TMP1]] -// -// -// CHECK-LABEL: define i32 @consume( -// CHECK-SAME: ptr noundef readonly captures(none) [[PTR:%.*]], ptr noundef readonly captures(none) [[PTR2:%.*]], i32 noundef [[IDX:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: [[BYVAL_TEMP_SROA_0_0_COPYLOAD:%.*]] = load ptr, ptr [[PTR2]], align 8 -// CHECK-NEXT: [[BYVAL_TEMP_SROA_4_0_PTR2_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR2]], i64 8 -// CHECK-NEXT: [[BYVAL_TEMP_SROA_4_0_COPYLOAD:%.*]] = load ptr, ptr [[BYVAL_TEMP_SROA_4_0_PTR2_SROA_IDX]], align 8 -// CHECK-NEXT: [[IDXPROM_I:%.*]] = sext i32 [[IDX]] to i64 -// CHECK-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr i32, ptr [[BYVAL_TEMP_SROA_0_0_COPYLOAD]], i64 [[IDXPROM_I]] -// CHECK-NEXT: [[TMP0:%.*]] = icmp ult ptr [[ARRAYIDX_I]], [[BYVAL_TEMP_SROA_4_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP0]], label %[[CONT_I:.*]], label %[[TRAP_I:.*]], !annotation [[META2]] -// CHECK: [[TRAP_I]]: -// CHECK-NEXT: tail call void asm sideeffect "", "n"(i64 0) #[[ATTR3]], !annotation [[META2]] -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] -// CHECK-NEXT: unreachable, !annotation [[META2]] -// CHECK: [[CONT_I]]: -// CHECK-NEXT: [[BYVAL_TEMP_SROA_5_0_PTR2_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR2]], i64 16 -// CHECK-NEXT: [[BYVAL_TEMP_SROA_5_0_COPYLOAD:%.*]] = load ptr, ptr [[BYVAL_TEMP_SROA_5_0_PTR2_SROA_IDX]], align 8, !tbaa [[TBAA3]] -// CHECK-NEXT: [[DOTNOT_I:%.*]] = icmp ult ptr [[ARRAYIDX_I]], [[BYVAL_TEMP_SROA_5_0_COPYLOAD]], !annotation [[META8]] -// CHECK-NEXT: br i1 [[DOTNOT_I]], label %[[TRAP1_I:.*]], label %[[I_WANT_TO_BE_INLINED_EXIT:.*]], !annotation [[META8]] -// CHECK: [[TRAP1_I]]: -// CHECK-NEXT: tail call void asm sideeffect "", "n"(i64 1) #[[ATTR3]], !annotation [[META8]] -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META8]] -// CHECK-NEXT: unreachable, !annotation [[META8]] -// CHECK: [[I_WANT_TO_BE_INLINED_EXIT]]: -// CHECK-NEXT: [[AGG_TEMP_SROA_0_0_COPYLOAD:%.*]] = load ptr, ptr [[PTR]], align 8 -// CHECK-NEXT: [[AGG_TEMP_SROA_2_0_PTR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 8 -// CHECK-NEXT: [[AGG_TEMP_SROA_2_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_2_0_PTR_SROA_IDX]], align 8 -// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr i32, ptr [[AGG_TEMP_SROA_0_0_COPYLOAD]], i64 [[IDXPROM_I]] -// CHECK-NEXT: [[TMP1:%.*]] = icmp ult ptr [[ARRAYIDX]], [[AGG_TEMP_SROA_2_0_COPYLOAD]], !annotation [[META2]] -// CHECK-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !annotation [[META2]] -// CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void asm sideeffect "", "n"(i64 2) #[[ATTR3]], !annotation [[META2]] -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META2]] -// CHECK-NEXT: unreachable, !annotation [[META2]] -// CHECK: [[CONT]]: -// CHECK-NEXT: [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 16 -// CHECK-NEXT: [[AGG_TEMP_SROA_3_0_COPYLOAD:%.*]] = load ptr, ptr [[AGG_TEMP_SROA_3_0_PTR_SROA_IDX]], align 8, !tbaa [[TBAA3]] -// CHECK-NEXT: [[DOTNOT:%.*]] = icmp ult ptr [[ARRAYIDX]], [[AGG_TEMP_SROA_3_0_COPYLOAD]], !annotation [[META8]] -// CHECK-NEXT: br i1 [[DOTNOT]], label %[[TRAP1:.*]], label %[[CONT2:.*]], !annotation [[META8]] -// CHECK: [[TRAP1]]: -// CHECK-NEXT: tail call void asm sideeffect "", "n"(i64 3) #[[ATTR3]], !annotation [[META8]] -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR4]], !annotation [[META8]] -// CHECK-NEXT: unreachable, !annotation [[META8]] -// CHECK: [[CONT2]]: -// CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA9]] -// CHECK-NEXT: ret i32 [[TMP2]] -// -//. -// CHECK: [[META2]] = !{!"bounds-safety-check-ptr-lt-upper-bound"} -// CHECK: [[TBAA3]] = !{[[META4:![0-9]+]], [[META4]], i64 0} -// CHECK: [[META4]] = !{!"p1 int", [[META5:![0-9]+]], i64 0} -// CHECK: [[META5]] = !{!"any pointer", [[META6:![0-9]+]], i64 0} -// CHECK: [[META6]] = !{!"omnipotent char", [[META7:![0-9]+]], i64 0} -// CHECK: [[META7]] = !{!"Simple C/C++ TBAA"} -// CHECK: [[META8]] = !{!"bounds-safety-check-ptr-ge-lower-bound"} -// CHECK: [[TBAA9]] = !{[[META10:![0-9]+]], [[META10]], i64 0} -// CHECK: [[META10]] = !{!"int", [[META6]], i64 0} -//. +//// NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: +// CHECK: {{.*}} diff --git a/clang/test/BoundsSafety/Profile/flexible-array-member-checks-code-coverage.c b/clang/test/BoundsSafety/Profile/flexible-array-member-checks-code-coverage.c index fa415597de76f..2f13fef9e416f 100644 --- a/clang/test/BoundsSafety/Profile/flexible-array-member-checks-code-coverage.c +++ b/clang/test/BoundsSafety/Profile/flexible-array-member-checks-code-coverage.c @@ -27,14 +27,14 @@ void bar(struct s *p); // CHECK-NEXT: [[DOTNOT:%.*]] = icmp ugt ptr [[BUF]], [[TMP1]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[DOTNOT49:%.*]] = icmp ugt ptr [[TMP1]], [[ADD_PTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[DOTNOT]], i1 true, i1 [[DOTNOT49]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND]], label [[TRAP:%.*]], label [[CONT27:%.*]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND]], label [[TRAP:%.*]], label [[CONT27:%.*]], !prof [[PROF6:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: trap: // CHECK-NEXT: tail call void @llvm.ubsantrap(i8 25) #[[ATTR3:[0-9]+]], {{!annotation ![0-9]+}} // CHECK-NEXT: unreachable, {{!annotation ![0-9]+}} // CHECK: cont27: // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[BUF]], align 4, {{!tbaa ![0-9]+}} // CHECK-NEXT: [[FLEX_COUNT_MINUS:%.*]] = icmp sgt i32 [[TMP2]], -1, {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[FLEX_COUNT_MINUS]], label [[CONT30:%.*]], label [[TRAP]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[FLEX_COUNT_MINUS]], label [[CONT30:%.*]], label [[TRAP]], !prof [[PROF13:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cont30: // CHECK-NEXT: [[GEPDIFF:%.*]] = add nsw i64 [[IDX_EXT]], -4, {{!annotation ![0-9]+}} // CHECK-NEXT: [[FLEX_AVAIL_COUNT_DIV:%.*]] = ashr exact i64 [[GEPDIFF]], 2, {{!annotation ![0-9]+}} @@ -42,7 +42,7 @@ void bar(struct s *p); // CHECK-NEXT: [[FLEX_COUNT_CHECK_NOT:%.*]] = icmp ult i64 [[FLEX_AVAIL_COUNT_DIV]], [[FLEX_COUNT_INTPTR]], {{!annotation ![0-9]+}} // CHECK-NEXT: [[DOTNOT50:%.*]] = icmp eq i32 [[SIZE]], 0, {{!annotation ![0-9]+}} // CHECK-NEXT: [[OR_COND52:%.*]] = or i1 [[DOTNOT50]], [[FLEX_COUNT_CHECK_NOT]], {{!annotation ![0-9]+}} -// CHECK-NEXT: br i1 [[OR_COND52]], label [[TRAP]], label [[CONT40]], {{!annotation ![0-9]+}} +// CHECK-NEXT: br i1 [[OR_COND52]], label [[TRAP]], label [[CONT40]], !prof [[PROF17:![0-9]+]], {{!annotation ![0-9]+}} // CHECK: cont40: // CHECK-NEXT: tail call void @bar(ptr noundef [[BUF]]) #[[ATTR4:[0-9]+]] // CHECK-NEXT: ret void diff --git a/clang/utils/bounds_safety_fixup_codegen_tests.sh b/clang/utils/bounds_safety_fixup_codegen_tests.sh new file mode 100755 index 0000000000000..610ca8a54ad16 --- /dev/null +++ b/clang/utils/bounds_safety_fixup_codegen_tests.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +function usage() { + echo "$0 --bin-dir" + echo "" +} + +BIN_DIR="" + +while [ -n "$1" ]; do + case "$1" in + --bin-dir) + shift + BIN_DIR="$1" + ;; + --help|-h) + usage + exit 0 + ;; + *) + echo "Unrecognized option \"${1}\"" + exit 1 + ;; + esac + shift +done + +if [ ! -d "${BIN_DIR}" ]; then + echo "BIN_DIR (${BIN_DIR}) does not exist" + exit 1 +fi + +LLVM_ROOT=$( cd "${BASH_SOURCE[0]%/*}/../../" ; pwd ) +echo "LLVM_ROOT:${LLVM_ROOT}" + +if [ ! -d "${LLVM_ROOT}" ]; then + echo "LLVM_ROOT (${LLVM_ROOT}) does not exist" + exit 1 +fi + +TEST_ROOT="${LLVM_ROOT}/clang/test" + +if [ ! -d "${TEST_ROOT}" ]; then + echo "TEST_ROOT (${TEST_ROOT}) does not exist" + exit 1 +fi + +UPDATE_SCRIPT="${LLVM_ROOT}/llvm/utils/update_cc_test_checks.py" + +if [ ! -f "${UPDATE_SCRIPT}" ]; then + echo "UPDATE_SCRIPT (${UPDATE_SCRIPT}) does not exist" + exit 1 +fi + + +# Add test paths here: +# E.g: +# TESTS=( \ +# BoundsSafety/CodeGen/constant-forge-ptr-expr.c \ +# ) +TESTS=( ) + +for t in "${TESTS[@]}"; do + TEST=${TEST_ROOT}/$t + echo "Processing ${TEST}" + if [ ! -f "${TEST}" ]; then + echo "Can't find ${TEST}" + exit 1 + fi + + # Skip tests that aren't automatically generated codegen tests + IS_CODEGEN_TEST="$(grep -Ec 'Assertions have been autogenerated by utils/update_cc_test_checks\.py' ${TEST})" + if [ "${IS_CODEGEN_TEST}" -eq 0 ]; then + echo "Skipping non-codgen test" + continue + fi + + # Note we assume BSD/macOS sed + + # Disable the Objective-C RUN lines because they cause problems with the updating script because IR conflicts + sed -E -n -I '' '/^\/\/ RUN:.+-fbounds-attributes-objc-experimental/s/\/\/ RUN:/\/\/ XXX_run:/;p' ${TEST} + + # Update the codegen CHECK lines + "${UPDATE_SCRIPT}" --llvm-bin "${BIN_DIR}" ${TEST} + + # Re-enable the Objective-C RUN lines. + sed -E -n -I '' '/^\/\/ XXX_run:.+-fbounds-attributes-objc-experimental/s/\/\/ XXX_run:/\/\/ RUN:/;p' ${TEST} + +done