llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-x86 Author: Nikita Popov (nikic) <details> <summary>Changes</summary> This stops emitting the zeroext/signext attributes for return values on X86, except for `bool` (which stays zeroext, as it requires zero-extension to 8 bits) and Darwin. The `getTypeForExtReturn()` in the X86 backend already ignores zeroext/signext for i8 and i16 types on non-Darwin platforms. For these cases, this change has no impact on codegen: The intent is merely to clarify the used psABI. Using zeroext/signext when no actual extension takes place is highly confusing, esp. when the behavior is different between return values and arguments. However, this *does* change behavior for non-i8/i16 types. Specifically, it changes `_BitInt` types to have unspecified high bits, instead of performing a partial sign/zero extension to 8, 16 or 32 bits. This makes `_BitInt` comply with the Linux psABI, the previous behavior was incorrect. MSVC does not support `_BitInt`, so there is no correct ABI there. Because the only case with actual behavior change is `_BitInt`, I'm not bothering with `-fclang-abi-compat` for this change. We explicitly document `_BitInt` as not ABI stable at this point. This change does not affect handling of arguments. --- Patch is 42.78 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/232729.diff 19 Files Affected: - (modified) clang/lib/CodeGen/Targets/X86.cpp (+19-5) - (modified) clang/test/C/C2y/n3254.c (+2-2) - (modified) clang/test/CodeGen/X86/ms-x86-intrinsics.c (+2-2) - (modified) clang/test/CodeGen/X86/x86_64-arguments.c (+3-3) - (modified) clang/test/CodeGen/attr-noundef.cpp (+1-1) - (modified) clang/test/CodeGen/attr-sized-by-for-pointers.c (+12-12) - (modified) clang/test/CodeGen/attr-sized-by-or-null-for-pointers.c (+12-12) - (modified) clang/test/CodeGen/function-attributes.c (+4-4) - (modified) clang/test/CodeGen/overflow-behavior-types.cpp (+1-1) - (modified) clang/test/CodeGenCXX/cxx20-consteval-crash.cpp (+3-3) - (modified) clang/test/CodeGenCXX/ext-int.cpp (+2-2) - (modified) clang/test/CodeGenCXX/ms-inline-asm-return.cpp (+2-2) - (modified) clang/test/CodeGenCXX/pr12251.cpp (+1-1) - (modified) clang/test/CodeGenObjC/property.m (+3-3) - (modified) clang/test/DebugInfo/CXX/ptr-to-ptr.cpp (+2-2) - (modified) clang/test/OpenMP/distribute_parallel_for_num_threads_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/distribute_parallel_for_simd_num_threads_codegen.cpp (+5-5) - (modified) llvm/lib/ABI/Targets/X86.cpp (+19-4) - (modified) llvm/unittests/ABI/X86TargetInfoTest.cpp (+49) ``````````diff diff --git a/clang/lib/CodeGen/Targets/X86.cpp b/clang/lib/CodeGen/Targets/X86.cpp index c0947c481d2b07..eed851b306ad49 100644 --- a/clang/lib/CodeGen/Targets/X86.cpp +++ b/clang/lib/CodeGen/Targets/X86.cpp @@ -459,6 +459,18 @@ bool X86_32ABIInfo::canExpandIndirectArgument(QualType Ty) const { return Size == getContext().getTypeSize(Ty); } +static bool shouldExtendReturnType(const ABIInfo &Info, QualType RetTy) { + // Bools need to be zero-extended to 8 bits for all ABIs. + if (RetTy->isBooleanType()) + return true; + + // Promotable integer types get extended only for Darwin. + if (!Info.getTarget().getTriple().isOSDarwin()) + return false; + + return Info.isPromotableIntegerTypeForABI(RetTy); +} + ABIArgInfo X86_32ABIInfo::getIndirectReturnResult(QualType RetTy, CCState &State) const { // If the return value is indirect, then the hidden argument is consuming one // integer register. @@ -565,8 +577,8 @@ ABIArgInfo X86_32ABIInfo::classifyReturnType(QualType RetTy, if (EIT->getNumBits() > 64) return getIndirectReturnResult(RetTy, State); - return (isPromotableIntegerTypeForABI(RetTy) ? ABIArgInfo::getExtend(RetTy) - : ABIArgInfo::getDirect()); + return shouldExtendReturnType(*this, RetTy) ? ABIArgInfo::getExtend(RetTy) + : ABIArgInfo::getDirect(); } unsigned X86_32ABIInfo::getTypeStackAlignInBytes(QualType Ty, @@ -2385,8 +2397,8 @@ ABIArgInfo X86_64ABIInfo::getIndirectReturnResult(QualType Ty) const { return getNaturalAlignIndirect(Ty, getDataLayout().getAllocaAddrSpace()); llvm::Type *IRTy = CGT.ConvertType(Ty); - return (isPromotableIntegerTypeForABI(Ty) ? ABIArgInfo::getExtend(Ty, IRTy) - : ABIArgInfo::getDirect(IRTy)); + return shouldExtendReturnType(*this, Ty) ? ABIArgInfo::getExtend(Ty, IRTy) + : ABIArgInfo::getDirect(IRTy); } return getNaturalAlignIndirect(Ty, getDataLayout().getAllocaAddrSpace()); @@ -2838,7 +2850,9 @@ ABIArgInfo X86_64ABIInfo::classifyReturnType(QualType RetTy) const { if (RetTy->isIntegralOrEnumerationType() && isPromotableIntegerTypeForABI(RetTy)) - return ABIArgInfo::getExtend(RetTy); + return shouldExtendReturnType(*this, RetTy) + ? ABIArgInfo::getExtend(RetTy) + : ABIArgInfo::getDirect(); } if (ResType->isIntegerTy(128)) { diff --git a/clang/test/C/C2y/n3254.c b/clang/test/C/C2y/n3254.c index 9f8c47756df328..c83217559a704c 100644 --- a/clang/test/C/C2y/n3254.c +++ b/clang/test/C/C2y/n3254.c @@ -37,7 +37,7 @@ int foo() { return s_ptr->x; } -// CHECK-LABEL: define dso_local signext i8 @bar( +// CHECK-LABEL: define dso_local i8 @bar( // CHECK-SAME: ) #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[BUFFER:%.*]] = alloca [12 x i8], align 4 @@ -77,7 +77,7 @@ struct T { DECL_BUFFER(struct S, buffer); }; -// CHECK-LABEL: define dso_local signext i8 @quux( +// CHECK-LABEL: define dso_local i8 @quux( // CHECK-SAME: ) #[[ATTR0]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[T:%.*]] = alloca [[STRUCT_T:%.*]], align 4 diff --git a/clang/test/CodeGen/X86/ms-x86-intrinsics.c b/clang/test/CodeGen/X86/ms-x86-intrinsics.c index 9099b56e50d45e..803444df852278 100644 --- a/clang/test/CodeGen/X86/ms-x86-intrinsics.c +++ b/clang/test/CodeGen/X86/ms-x86-intrinsics.c @@ -11,7 +11,7 @@ char test__readfsbyte(unsigned long Offset) { return __readfsbyte(++Offset); } -// CHECK-I386-LABEL: define dso_local signext i8 @test__readfsbyte(i32 noundef %Offset) +// CHECK-I386-LABEL: define dso_local i8 @test__readfsbyte(i32 noundef %Offset) // CHECK-I386: %inc = add i32 %Offset, 1 // CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %inc to ptr addrspace(257) // CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i8, ptr addrspace(257) [[PTR]], align 1 @@ -20,7 +20,7 @@ char test__readfsbyte(unsigned long Offset) { short test__readfsword(unsigned long Offset) { return __readfsword(++Offset); } -// CHECK-I386-LABEL: define dso_local signext i16 @test__readfsword(i32 noundef %Offset) +// CHECK-I386-LABEL: define dso_local i16 @test__readfsword(i32 noundef %Offset) // CHECK-I386: %inc = add i32 %Offset, 1 // CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %inc to ptr addrspace(257) // CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i16, ptr addrspace(257) [[PTR]], align 2 diff --git a/clang/test/CodeGen/X86/x86_64-arguments.c b/clang/test/CodeGen/X86/x86_64-arguments.c index b56792dd50cddd..73f99b9a814b4e 100644 --- a/clang/test/CodeGen/X86/x86_64-arguments.c +++ b/clang/test/CodeGen/X86/x86_64-arguments.c @@ -6,17 +6,17 @@ // RUN: FileCheck %s -check-prefix=CHECK -check-prefix=AVX -check-prefix=AVX512 #include <stdarg.h> -// CHECK-LABEL: define{{.*}} signext i8 @f0() +// CHECK-LABEL: define dso_local i8 @f0() char f0(void) { return 0; } -// CHECK-LABEL: define{{.*}} signext i16 @f1() +// CHECK-LABEL: define dso_local i16 @f1() short f1(void) { return 0; } -// CHECK-LABEL: define{{.*}} i32 @f2() +// CHECK-LABEL: define dso_local i32 @f2() int f2(void) { return 0; } diff --git a/clang/test/CodeGen/attr-noundef.cpp b/clang/test/CodeGen/attr-noundef.cpp index 582743a5be5fa6..9b14381d004b84 100644 --- a/clang/test/CodeGen/attr-noundef.cpp +++ b/clang/test/CodeGen/attr-noundef.cpp @@ -158,7 +158,7 @@ void pass_large_BitInt(_BitInt(127) e) { // CHECK: [[DEF]] ptr @{{.*}}ret_npt{{.*}}() // CHECK: [[DEF]] void @{{.*}}pass_npt{{.*}}(ptr % -// CHECK-INTEL: [[DEF]] noundef signext i3 @{{.*}}ret_BitInt{{.*}}() +// CHECK-INTEL: [[DEF]] noundef i3 @{{.*}}ret_BitInt{{.*}}() // CHECK-AARCH: [[DEF]] noundef i3 @{{.*}}ret_BitInt{{.*}}() // CHECK-INTEL: [[DEF]] void @{{.*}}pass_BitInt{{.*}}(i3 noundef signext % // CHECK-AARCH: [[DEF]] void @{{.*}}pass_BitInt{{.*}}(i3 noundef % diff --git a/clang/test/CodeGen/attr-sized-by-for-pointers.c b/clang/test/CodeGen/attr-sized-by-for-pointers.c index dabe3163571a5d..a3293689027969 100644 --- a/clang/test/CodeGen/attr-sized-by-for-pointers.c +++ b/clang/test/CodeGen/attr-sized-by-for-pointers.c @@ -210,7 +210,7 @@ struct annotated_sized_ptr_odd_pointee { unsigned byte_count; }; -// SANITIZE-WITH-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_odd_pointee( +// SANITIZE-WITH-ATTR-LABEL: define dso_local i8 @test_load_subscript_odd_pointee( // SANITIZE-WITH-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 @@ -230,7 +230,7 @@ struct annotated_sized_ptr_odd_pointee { // SANITIZE-WITH-ATTR-NEXT: [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA19:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: ret i8 [[TMP4]] // -// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_odd_pointee( +// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local i8 @test_load_subscript_odd_pointee( // NO-SANITIZE-WITH-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] { // NO-SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITH-ATTR-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8 @@ -240,7 +240,7 @@ struct annotated_sized_ptr_odd_pointee { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i8 [[TMP1]] // -// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_odd_pointee( +// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_odd_pointee( // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITHOUT-ATTR-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8 @@ -250,7 +250,7 @@ struct annotated_sized_ptr_odd_pointee { // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: ret i8 [[TMP1]] // -// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_odd_pointee( +// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_odd_pointee( // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8 @@ -341,14 +341,14 @@ struct annotated_sized_ptr_narrow_unsigned_count { unsigned char byte_count; }; -// SANITIZE-WITH-ATTR-LABEL: define dso_local noundef signext i8 @test_load_subscript_narrow_unsigned_count( +// SANITIZE-WITH-ATTR-LABEL: define dso_local noundef i8 @test_load_subscript_narrow_unsigned_count( // SANITIZE-WITH-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] { // SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = zext i32 [[INDEX]] to i64, !nosanitize [[META6]] // SANITIZE-WITH-ATTR-NEXT: tail call void @__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB11:[0-9]+]], i64 [[TMP0]]) #[[ATTR6]], !nosanitize [[META6]] // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META6]] // -// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_unsigned_count( +// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_unsigned_count( // NO-SANITIZE-WITH-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1]] { // NO-SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS13LARGE_POINTEEPTR_TBAA20:![0-9]+]] @@ -357,7 +357,7 @@ struct annotated_sized_ptr_narrow_unsigned_count { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i8 [[TMP1]] // -// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_unsigned_count( +// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_unsigned_count( // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS13LARGE_POINTEEPTR_TBAA20:![0-9]+]] @@ -366,7 +366,7 @@ struct annotated_sized_ptr_narrow_unsigned_count { // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17]] // SANITIZE-WITHOUT-ATTR-NEXT: ret i8 [[TMP1]] // -// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_unsigned_count( +// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_unsigned_count( // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS13LARGE_POINTEEPTR_TBAA20:![0-9]+]] @@ -388,14 +388,14 @@ struct annotated_sized_ptr_narrow_signed_count { signed char byte_count; }; -// SANITIZE-WITH-ATTR-LABEL: define dso_local noundef signext i8 @test_load_subscript_narrow_signed_count( +// SANITIZE-WITH-ATTR-LABEL: define dso_local noundef i8 @test_load_subscript_narrow_signed_count( // SANITIZE-WITH-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR2]] { // SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = zext i32 [[INDEX]] to i64, !nosanitize [[META6]] // SANITIZE-WITH-ATTR-NEXT: tail call void @__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB13:[0-9]+]], i64 [[TMP0]]) #[[ATTR6]], !nosanitize [[META6]] // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META6]] // -// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_signed_count( +// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_signed_count( // NO-SANITIZE-WITH-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1]] { // NO-SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS15MIDSIZE_POINTEEPTR_TBAA23:![0-9]+]] @@ -404,7 +404,7 @@ struct annotated_sized_ptr_narrow_signed_count { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i8 [[TMP1]] // -// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_signed_count( +// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_signed_count( // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS15MIDSIZE_POINTEEPTR_TBAA23:![0-9]+]] @@ -413,7 +413,7 @@ struct annotated_sized_ptr_narrow_signed_count { // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17]] // SANITIZE-WITHOUT-ATTR-NEXT: ret i8 [[TMP1]] // -// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_signed_count( +// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_signed_count( // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS15MIDSIZE_POINTEEPTR_TBAA23:![0-9]+]] diff --git a/clang/test/CodeGen/attr-sized-by-or-null-for-pointers.c b/clang/test/CodeGen/attr-sized-by-or-null-for-pointers.c index 05f3c57d861498..afe97592b9f7a1 100644 --- a/clang/test/CodeGen/attr-sized-by-or-null-for-pointers.c +++ b/clang/test/CodeGen/attr-sized-by-or-null-for-pointers.c @@ -222,7 +222,7 @@ struct annotated_sized_ptr_odd_pointee { unsigned byte_count; }; -// SANITIZE-WITH-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_odd_pointee( +// SANITIZE-WITH-ATTR-LABEL: define dso_local i8 @test_load_subscript_odd_pointee( // SANITIZE-WITH-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITH-ATTR-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8 @@ -244,7 +244,7 @@ struct annotated_sized_ptr_odd_pointee { // SANITIZE-WITH-ATTR-NEXT: [[TMP6:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA19:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: ret i8 [[TMP6]] // -// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_odd_pointee( +// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local i8 @test_load_subscript_odd_pointee( // NO-SANITIZE-WITH-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] { // NO-SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITH-ATTR-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8 @@ -254,7 +254,7 @@ struct annotated_sized_ptr_odd_pointee { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i8 [[TMP1]] // -// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_odd_pointee( +// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_odd_pointee( // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITHOUT-ATTR-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8 @@ -264,7 +264,7 @@ struct annotated_sized_ptr_odd_pointee { // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: ret i8 [[TMP1]] // -// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_odd_pointee( +// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_odd_pointee( // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8 @@ -357,14 +357,14 @@ struct annotated_sized_ptr_narrow_unsigned_count { unsigned char byte_count; }; -// SANITIZE-WITH-ATTR-LABEL: define dso_local noundef signext i8 @test_load_subscript_narrow_unsigned_count( +// SANITIZE-WITH-ATTR-LABEL: define dso_local noundef i8 @test_load_subscript_narrow_unsigned_count( // SANITIZE-WITH-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] { // SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = zext i32 [[INDEX]] to i64, !nosanitize [[META12]] // SANITIZE-WITH-ATTR-NEXT: tail call void @__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB11:[0-9]+]], i64 [[TMP0]]) #[[ATTR6]], !nosanitize [[META12]] // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META12]] // -// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_unsigned_count( +// NO-SANITIZE-WITH-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_unsigned_count( // NO-SANITIZE-WITH-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1]] { // NO-SANITIZE-WITH-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS13LARGE_POINTEEPTR_TBAA20:![0-9]+]] @@ -373,7 +373,7 @@ struct annotated_sized_ptr_narrow_unsigned_count { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i8 [[TMP1]] // -// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_unsigned_count( +// SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_unsigned_count( // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS13LARGE_POINTEEPTR_TBAA20:![0-9]+]] @@ -382,7 +382,7 @@ struct annotated_sized_ptr_narrow_unsigned_count { // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1, !tbaa [[CHAR_TBAA17]] // SANITIZE-WITHOUT-ATTR-NEXT: ret i8 [[TMP1]] // -// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local signext i8 @test_load_subscript_narrow_unsigned_count( +// NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local i8 @test_load_subscript_narrow_unsigned_count( // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr nofree noundef readonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR1]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRY:.*:]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P]], align 8, !tbaa [[_ZTS13LARGE_POINTEEPTR_TBAA20:![0-9]+]] @@ -404,14 +404,14 @@ struct annotated_sized_ptr_narrow_signed_count { signed char byte_count; }; -// SANITIZE-WITH-ATTR-LABEL: define dso_local noundef signext i8 @test_load_subscript_narrow_signed_count( +// SANITIZE-WITH-ATTR-LAB... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/232729 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
