From dc2bee5182c305b8334ce8031848eb8857a2ec53 Mon Sep 17 00:00:00 2001 From: Dan Liew Date: Fri, 11 Apr 2025 16:49:55 -0700 Subject: [PATCH 1/2] [BoundsSafety] Add script to automatically regenerate -fbound-safety codegen tests This is to help fix the tests failures in rdar://148767987 --- .../bounds_safety_fixup_codegen_tests.sh | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 clang/utils/bounds_safety_fixup_codegen_tests.sh 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 From 065a587d041e6a946cea7246c5babeaaef32de5b Mon Sep 17 00:00:00 2001 From: Dan Liew Date: Fri, 11 Apr 2025 16:46:08 -0700 Subject: [PATCH 2/2] [BoundsSafety][NFC] Unbreak codegen tests due to profile metadata on trap branches ``` commit 30f2e92c6968a1348a76e7ba169259bb345b784c Author: Florian Mayer Date: Fri Apr 4 10:58:08 2025 -0700 [clang] [sanitizer] predict trap checks succeed (#134310) Trap checks fail at most once (when the program crashes). ``` added profile metadata to trap branches that says its likely the trap succeeds. This shows up in the IR which broke many of our codegen tests. Many of the tests were automatically updated using `clang/utils/bounds_safety_fixup_codegen_tests.sh` but several had to be updated by hand. rdar://148767987 --- .../CodeGen/access-size-check-elt-size.c | 136 +-- .../CodeGen/access-size-check-unsized-elt.c | 15 +- .../CodeGen/array_subscript_agg.c | 308 ++--- ...tributed-in-return-null-system-header-O2.c | 5 +- .../CodeGen/bounds-attributed-return-O0.c | 27 +- .../CodeGen/bounds-attributed-return-O2.c | 47 +- .../bounds-attributed-return-null-O0.c | 15 +- .../bounds-attributed-return-null-O2.c | 15 +- ...nd-literal-counted_by-O0-disabled-checks.c | 23 +- .../CodeGen/compound-literal-counted_by-O0.c | 121 +- .../CodeGen/compound-literal-counted_by-O2.c | 132 +-- ...al-counted_by_or_null-O0-disabled-checks.c | 23 +- .../compound-literal-counted_by_or_null-O0.c | 155 +-- .../compound-literal-counted_by_or_null-O2.c | 162 +-- ...ound-literal-ended_by-O0-disabled-checks.c | 23 +- .../CodeGen/compound-literal-ended_by-O0.c | 291 ++--- .../CodeGen/compound-literal-ended_by-O2.c | 107 +- ...ound-literal-sized_by-O0-disabled-checks.c | 23 +- .../CodeGen/compound-literal-sized_by-O0.c | 121 +- .../CodeGen/compound-literal-sized_by-O2.c | 132 +-- ...eral-sized_by_or_null-O0-disabled-checks.c | 23 +- .../compound-literal-sized_by_or_null-O0.c | 155 +-- .../compound-literal-sized_by_or_null-O2.c | 162 +-- .../counted-by-nested-assignments-O0.c | 5 +- .../counted-by-nested-assignments-O2.c | 57 +- .../CodeGen/counted-by-or-null-from-bidi-O2.c | 7 +- ...nted_by_inc_constant_count_valid_codegen.c | 3 +- .../CodeGen/counted_by_or_null_call-O2.c | 20 +- ...dynamic-inout-count-counted-by-signed-O2.c | 16 +- ...namic-inout-count-counted-by-unsigned-O2.c | 36 +- .../dynamic-inout-count-sized-by-signed-O2.c | 8 +- ...dynamic-inout-count-sized-by-unsigned-O2.c | 36 +- .../CodeGen/ended-by-nested-assignments-O0.c | 5 +- .../CodeGen/ended-by-nested-assignments-O2.c | 58 +- .../CodeGen/ended_by_const_param-O2.c | 5 +- .../CodeGen/ended_by_const_param.c | 3 +- ...ed_by_param_in_call-O0-disabled-lb-check.c | 29 +- .../CodeGen/ended_by_param_in_call-O0.c | 29 +- ...ed_by_param_in_call-O2-disabled-lb-check.c | 8 +- .../CodeGen/ended_by_param_in_call-O2.c | 2 +- .../CodeGen/flexible-array-member-bidi-O0.c | 1001 +++++++++-------- .../CodeGen/flexible-array-member-bidi-O2.c | 42 +- .../flexible-array-member-shared-decls-O0.c | 249 ++-- .../flexible-array-member-shared-decls-O2.c | 60 +- .../CodeGen/init-struct-const-count-O0.c | 54 +- .../CodeGen/init-struct-const-count-O2.c | 46 +- .../CodeGen/large-array-subscript-x86_64.c | 23 +- .../CodeGen/nested-struct-member-count-O2.c | 8 +- .../bounds-safety-ptr-conversion-O0.c | 6 +- .../CodeGen/opt-remarks/ptr-bounds-argc-O0.c | 6 +- .../CodeGen/opt-remarks/ptr-bounds-argc-O2.c | 2 +- .../CodeGen/opt-remarks/ptr-bounds-const-O0.c | 6 +- .../ptr-count-assignment-argc-O0.c | 4 +- .../ptr-count-assignment-const-O0.c | 4 +- ...-optimizations-no-bringup-missing-checks.c | 38 +- ...ations-structs-no-bringup-missing-checks.c | 4 +- .../range-check-optimizations-structs.c | 4 +- .../CodeGen/range-check-optimizations.c | 46 +- .../indexable-ptr-minus-assign.c | 2 +- .../indexable-ptr-plus-assign-unsigned.c | 2 +- .../indexable-ptr-plus-assign.c | 2 +- .../length-check-bound-check-removal.c | 6 +- .../CodeGen/runtime-checks/oob-member-expr.c | 23 +- .../CodeGen/sized_by_or_null_call-O2.c | 20 +- .../CodeGen/terminated-by-from-indexable-O2.c | 12 +- ...minated-by-from-indexable-ptr-to-term-O2.c | 24 +- .../CodeGen/trap-function-returns-O2.c | 18 +- .../CodeGen/trap-reasons/general_trap-O0.c | 2 +- .../indexable_ptr_new_lt_old-O0.c | 2 +- ..._ge_upper_bound-addr_of_struct_member-O0.c | 2 +- ...er_bound-terminated_by_from_indexable-O0.c | 2 +- ..._lt_lower_bound-addr_of_struct_member-O0.c | 2 +- ...tr_lt_lower_bound-deref-member_access-O0.c | 2 +- .../terminated_by_from_indexable_bounds-O0.c | 6 +- .../terminated_by_from_indexable_term-O0.c | 2 +- .../CodeGen/ubsan/ptr-arithmetic-struct.c | 2 +- .../CodeGen/ubsan/ptr-arithmetic.c | 2 +- .../unique-trap-blocks-O0-O2-opt-disabled.c | 30 +- .../CodeGen/unique-trap-blocks-O2.c | 88 +- ...exible-array-member-checks-code-coverage.c | 6 +- 80 files changed, 2196 insertions(+), 2212 deletions(-) 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