Skip to content

Commit

Permalink
Revert "[TBAA] Add verifier for tbaa.struct metadata (#86709)"
Browse files Browse the repository at this point in the history
This reverts commit 7dbba39.

Revert as there are reports this triggers during ThinLTO in some
configurations.
  • Loading branch information
fhahn committed Apr 22, 2024
1 parent 821935b commit c8e5ad4
Show file tree
Hide file tree
Showing 9 changed files with 9 additions and 54 deletions.
1 change: 0 additions & 1 deletion llvm/include/llvm/IR/Verifier.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ class TBAAVerifier {
/// Visit an instruction and return true if it is valid, return false if an
/// invalid TBAA is attached.
bool visitTBAAMetadata(Instruction &I, const MDNode *MD);
bool visitTBAAStructMetadata(Instruction &I, const MDNode *MD);
};

/// Check a function for errors, useful for use when debugging a
Expand Down
32 changes: 0 additions & 32 deletions llvm/lib/IR/Verifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5123,9 +5123,6 @@ void Verifier::visitInstruction(Instruction &I) {
if (MDNode *TBAA = I.getMetadata(LLVMContext::MD_tbaa))
TBAAVerifyHelper.visitTBAAMetadata(I, TBAA);

if (MDNode *TBAA = I.getMetadata(LLVMContext::MD_tbaa_struct))
TBAAVerifyHelper.visitTBAAStructMetadata(I, TBAA);

if (MDNode *MD = I.getMetadata(LLVMContext::MD_noalias))
visitAliasScopeListMetadata(MD);
if (MDNode *MD = I.getMetadata(LLVMContext::MD_alias_scope))
Expand Down Expand Up @@ -7462,35 +7459,6 @@ bool TBAAVerifier::visitTBAAMetadata(Instruction &I, const MDNode *MD) {
return true;
}

bool TBAAVerifier::visitTBAAStructMetadata(Instruction &I, const MDNode *MD) {
CheckTBAA(MD->getNumOperands() % 3 == 0,
"tbaa.struct operands must occur in groups of three", &I, MD);

// Each group of three operands must consist of two integers and a
// tbaa node. Moreover, the regions described by the offset and size
// operands must be non-overlapping.
std::optional<APInt> NextFree;
for (unsigned int Idx = 0; Idx < MD->getNumOperands(); Idx += 3) {
auto *OffsetCI =
mdconst::dyn_extract_or_null<ConstantInt>(MD->getOperand(Idx));
CheckTBAA(OffsetCI, "Offset must be a constant integer", &I, MD);

auto *SizeCI =
mdconst::dyn_extract_or_null<ConstantInt>(MD->getOperand(Idx + 1));
CheckTBAA(SizeCI, "Size must be a constant integer", &I, MD);

MDNode *TBAA = dyn_cast_or_null<MDNode>(MD->getOperand(Idx + 2));
CheckTBAA(TBAA, "TBAA tag missing", &I, MD);
visitTBAAMetadata(I, TBAA);

bool NonOverlapping = !NextFree || NextFree->ule(OffsetCI->getValue());
CheckTBAA(NonOverlapping, "Overlapping tbaa.struct regions", &I, MD);

NextFree = OffsetCI->getValue() + SizeCI->getValue();
}
return true;
}

char VerifierLegacyPass::ID = 0;
INITIALIZE_PASS(VerifierLegacyPass, "verify", "Module Verifier", false, false)

Expand Down
4 changes: 1 addition & 3 deletions llvm/test/CodeGen/AArch64/arm64-abi_align.ll
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,4 @@ attributes #5 = { nobuiltin }
!1 = !{!"omnipotent char", !2}
!2 = !{!"Simple C/C++ TBAA"}
!3 = !{!"short", !1}
!4 = !{i64 0, i64 4, !5, i64 4, i64 2, !6, i64 8, i64 4, !5, i64 12, i64 2, !6, i64 16, i64 4, !5, i64 20, i64 2, !6}
!5 = !{!0, !0, i64 0}
!6 = !{!3, !3, i64 0}
!4 = !{i64 0, i64 4, !0, i64 4, i64 2, !3, i64 8, i64 4, !0, i64 12, i64 2, !3, i64 16, i64 4, !0, i64 20, i64 2, !3}
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,4 @@ attributes #1 = { argmemonly nounwind }
!5 = distinct !{!5, !"some domain"}
!6 = !{!7}
!7 = distinct !{!7, !5, !"some scope 2"}
!8 = !{i64 0, i64 8, !0}
!8 = !{i64 0, i64 8, null}
2 changes: 1 addition & 1 deletion llvm/test/Transforms/InstCombine/struct-assign-tbaa.ll
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ entry:
!1 = !{!"omnipotent char", !0}
!2 = !{!5, !5, i64 0}
!3 = !{i64 0, i64 4, !2}
!4 = !{i64 0, i64 8, !2}
!4 = !{i64 0, i64 8, null}
!5 = !{!"float", !0}
!6 = !{i64 0, i64 4, !2, i64 4, i64 4, !2}
!7 = !{i64 0, i64 2, !2, i64 4, i64 6, !2}
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/SROA/tbaa-struct3.ll
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias
!6 = !{!5, !5, i64 0}
!7 = !{i64 0, i64 8, !6, i64 8, i64 4, !1}
!8 = !{i64 0, i64 4, !1, i64 4, i64 8, !6}
!9 = !{i64 0, i64 8, !6, i64 8, i64 8, !1}
!9 = !{i64 0, i64 8, !6, i64 4, i64 8, !1}
!10 = !{i64 0, i64 2, !1, i64 2, i64 2, !1}
!11 = !{i64 0, i64 1, !1, i64 1, i64 3, !1}
!12 = !{i64 0, i64 2, !1, i64 2, i64 6, !1}
Expand Down
3 changes: 1 addition & 2 deletions llvm/test/Transforms/Scalarizer/basic-inseltpoison.ll
Original file line number Diff line number Diff line change
Expand Up @@ -836,6 +836,5 @@ define <2 x i32> @f23_crash(<2 x i32> %srcvec, i32 %v1) {
!2 = !{ !"set2", !0 }
!3 = !{ !3, !{!"llvm.loop.parallel_accesses", !13} }
!4 = !{ float 4.0 }
!5 = !{ i64 0, i64 8, !6 }
!6 = !{ !1, !1, i64 0 }
!5 = !{ i64 0, i64 8, null }
!13 = distinct !{}
3 changes: 1 addition & 2 deletions llvm/test/Transforms/Scalarizer/basic.ll
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,5 @@ define <2 x i8> @test_copy_trunc_flags(<2 x i32> %src) {
!2 = !{ !"set2", !0 }
!3 = !{ !3, !{!"llvm.loop.parallel_accesses", !13} }
!4 = !{ float 4.0 }
!5 = !{ i64 0, i64 8, !6 }
!6 = !{ !1, !1, i64 0 }
!5 = !{ i64 0, i64 8, null }
!13 = distinct !{}
14 changes: 3 additions & 11 deletions llvm/test/Verifier/tbaa-struct.ll
Original file line number Diff line number Diff line change
@@ -1,36 +1,28 @@
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
; RUN: llvm-as < %s 2>&1

; FIXME: The verifer should reject the invalid !tbaa.struct nodes below.

define void @test_overlapping_regions(ptr %a1) {
; CHECK: Overlapping tbaa.struct regions
; CHECK-NEXT: %ld = load i8, ptr %a1, align 1, !tbaa.struct !0
%ld = load i8, ptr %a1, align 1, !tbaa.struct !0
ret void
}

define void @test_size_not_integer(ptr %a1) {
; CHECK: Size must be a constant integer
; CHECK-NEXT: store i8 1, ptr %a1, align 1, !tbaa.struct !5
store i8 1, ptr %a1, align 1, !tbaa.struct !5
ret void
}

define void @test_offset_not_integer(ptr %a1, ptr %a2) {
; CHECK: Offset must be a constant integer
; CHECK-NEXT: tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %a1, ptr align 8 %a2, i64 16, i1 false), !tbaa.struct !6
tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %a1, ptr align 8 %a2, i64 16, i1 false), !tbaa.struct !6
ret void
}

define void @test_tbaa_missing(ptr %a1, ptr %a2) {
; CHECK: TBAA tag missing
; CHECK-NEXT: tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %a1, ptr align 8 %a2, i64 16, i1 false), !tbaa.struct !7
tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %a1, ptr align 8 %a2, i64 16, i1 false), !tbaa.struct !7
ret void
}

define void @test_tbaa_invalid(ptr %a1) {
; CHECK: Old-style TBAA is no longer allowed, use struct-path TBAA instead
; CHECK-NEXT: store i8 1, ptr %a1, align 1, !tbaa.struct !8
store i8 1, ptr %a1, align 1, !tbaa.struct !8
ret void
}
Expand Down

0 comments on commit c8e5ad4

Please sign in to comment.