[llvm] [AutoUpgrade] Upgrade old-style !tbaa.struct field tags (PR #225967)
Abhay Kanhere via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 25 11:51:13 PDT 2026
https://github.com/AbhayKanhere updated https://github.com/llvm/llvm-project/pull/225967
>From 17d819ea890696b830218d17c4ba9a7b59cbf119 Mon Sep 17 00:00:00 2001
From: Abhay Kanhere <a_kanhere at apple.com>
Date: Wed, 23 Sep 2026 15:29:01 -0700
Subject: [PATCH 1/3] [AutoUpgrade] Upgrade old-style !tbaa.struct field tags
Extend the TBAA auto-upgrade to rewrite old-style scalar field tags inside
!tbaa.struct to the struct-path aware format, matching the existing
top-level !tbaa upgrade.
---
llvm/include/llvm/AsmParser/LLParser.h | 1 +
llvm/include/llvm/IR/AutoUpgrade.h | 5 +++
llvm/lib/AsmParser/LLParser.cpp | 10 +++++
llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 3 ++
llvm/lib/IR/AutoUpgrade.cpp | 22 +++++++++++
llvm/test/Bitcode/upgrade-tbaa-struct.ll | 46 ++++++++++++++++++++++
6 files changed, 87 insertions(+)
create mode 100644 llvm/test/Bitcode/upgrade-tbaa-struct.ll
diff --git a/llvm/include/llvm/AsmParser/LLParser.h b/llvm/include/llvm/AsmParser/LLParser.h
index 7cc8e9877bbd0..ccd8b61b119e3 100644
--- a/llvm/include/llvm/AsmParser/LLParser.h
+++ b/llvm/include/llvm/AsmParser/LLParser.h
@@ -120,6 +120,7 @@ namespace llvm {
SlotMapping *Slots;
SmallVector<Instruction*, 64> InstsWithTBAATag;
+ SmallVector<Instruction *, 64> InstsWithTBAAStructTag;
/// DIAssignID metadata does not support temporary RAUW so we cannot use
/// the normal metadata forward reference resolution method. Instead,
diff --git a/llvm/include/llvm/IR/AutoUpgrade.h b/llvm/include/llvm/IR/AutoUpgrade.h
index 53da20d63a7f1..b129994885b2d 100644
--- a/llvm/include/llvm/IR/AutoUpgrade.h
+++ b/llvm/include/llvm/IR/AutoUpgrade.h
@@ -85,6 +85,11 @@ namespace llvm {
/// Otherwise return the \p TBAANode itself.
LLVM_ABI MDNode *UpgradeTBAANode(MDNode &TBAANode);
+ /// If the given !tbaa.struct node has old-style scalar field tags, return an
+ /// equivalent node with each field tag upgraded to the struct-path aware
+ /// format. Otherwise return the node itself.
+ LLVM_ABI MDNode *UpgradeTBAAStructNode(MDNode &TBAAStructNode);
+
/// This is an auto-upgrade for bitcast between pointers with different
/// address spaces: the instruction is replaced by a pair ptrtoint+inttoptr.
LLVM_ABI Instruction *UpgradeBitCastInst(unsigned Opc, Value *V, Type *DestTy,
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index cc7633894fb74..30da28a7f0193 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -550,6 +550,14 @@ bool LLParser::validateEndOfModule(bool UpgradeDebugInfo) {
}
}
+ for (auto *Inst : InstsWithTBAAStructTag) {
+ MDNode *MD = Inst->getMetadata(LLVMContext::MD_tbaa_struct);
+ if (!MD)
+ continue;
+ if (MDNode *Upgraded = UpgradeTBAAStructNode(*MD); Upgraded != MD)
+ Inst->setMetadata(LLVMContext::MD_tbaa_struct, Upgraded);
+ }
+
// Look for intrinsic functions and CallInst that need to be upgraded. We use
// make_early_inc_range here because we may remove some functions.
for (Function &F : llvm::make_early_inc_range(*M))
@@ -2554,6 +2562,8 @@ bool LLParser::parseInstructionMetadata(Instruction &Inst) {
if (MDK == LLVMContext::MD_tbaa)
InstsWithTBAATag.push_back(&Inst);
+ else if (MDK == LLVMContext::MD_tbaa_struct)
+ InstsWithTBAAStructTag.push_back(&Inst);
// If this is the end of the list, we're done.
} while (EatIfPresent(lltok::comma));
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
index 6f1fbd627edbc..80e44634d6f95 100644
--- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
+++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
@@ -2647,6 +2647,9 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
if (I->second == LLVMContext::MD_tbaa) {
assert(!MD->isTemporary() && "should load MDs before attachments");
MD = UpgradeTBAANode(*MD);
+ } else if (I->second == LLVMContext::MD_tbaa_struct) {
+ assert(!MD->isTemporary() && "should load MDs before attachments");
+ MD = UpgradeTBAAStructNode(*MD);
}
Inst->setMetadata(I->second, MD);
}
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index cb0e0690a261f..42f456e82f387 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -6670,6 +6670,28 @@ MDNode *llvm::UpgradeTBAANode(MDNode &MD) {
return MDNode::get(Context, Elts);
}
+MDNode *llvm::UpgradeTBAAStructNode(MDNode &MD) {
+ // !tbaa.struct is a list of (offset, size, tag) triples. Upgrade any
+ // old-style scalar field tag to struct-path form via UpgradeTBAANode.
+ unsigned NumOperands = MD.getNumOperands();
+ if (NumOperands == 0 || NumOperands % 3 != 0)
+ return &MD; // Malformed; leave it for the verifier to reject.
+
+ SmallVector<Metadata *, 12> Elts(MD.op_begin(), MD.op_end());
+ bool Changed = false;
+ for (unsigned I = 2; I < NumOperands; I += 3) {
+ auto *Tag = dyn_cast_or_null<MDNode>(Elts[I]);
+ if (!Tag)
+ continue;
+ MDNode *Upgraded = UpgradeTBAANode(*Tag);
+ if (Upgraded == Tag)
+ continue;
+ Elts[I] = Upgraded;
+ Changed = true;
+ }
+ return Changed ? MDNode::get(MD.getContext(), Elts) : &MD;
+}
+
Instruction *llvm::UpgradeBitCastInst(unsigned Opc, Value *V, Type *DestTy,
Instruction *&Temp) {
if (Opc != Instruction::BitCast)
diff --git a/llvm/test/Bitcode/upgrade-tbaa-struct.ll b/llvm/test/Bitcode/upgrade-tbaa-struct.ll
new file mode 100644
index 0000000000000..6e4cf0cced95e
--- /dev/null
+++ b/llvm/test/Bitcode/upgrade-tbaa-struct.ll
@@ -0,0 +1,46 @@
+; RUN: llvm-as < %s | llvm-dis | FileCheck %s
+; RUN: verify-uselistorder < %s
+
+; Old-style scalar tags used as !tbaa.struct field tags are auto-upgraded to
+; the struct-path aware format, like top-level !tbaa. Null and already
+; struct-path field tags are left unchanged; an immutability flag is kept.
+
+define void @copy(ptr %a, ptr %b) {
+ call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 12, i1 false), !tbaa.struct !0
+; CHECK: !tbaa.struct [[TS:![0-9]+]]
+ ret void
+}
+
+define void @copy_flag_and_structpath(ptr %a, ptr %b) {
+ call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 8, i1 false), !tbaa.struct !5
+; CHECK: !tbaa.struct [[TS2:![0-9]+]]
+ ret void
+}
+
+declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
+
+; Old-style 2-operand scalar field tags and a null field tag.
+!0 = !{i64 0, i64 4, !1, i64 4, i64 4, !3, i64 8, i64 4, null}
+!1 = !{!"int", !2}
+!2 = !{!"omnipotent char", !4}
+!3 = !{!"float", !2}
+!4 = !{!"Simple C/C++ TBAA"}
+
+; Old-style 3-operand (immutable) field tag and an already struct-path field tag.
+!5 = !{i64 0, i64 4, !6, i64 4, i64 4, !7}
+!6 = !{!"const int", !2, i64 1}
+!7 = !{!8, !8, i64 0}
+!8 = !{!"double", !2}
+
+; CHECK: [[TS]] = !{i64 0, i64 4, [[TAG_INT:![0-9]+]], i64 4, i64 4, [[TAG_FLOAT:![0-9]+]], i64 8, i64 4, null}
+; CHECK: [[TAG_INT]] = !{[[TYPE_INT:![0-9]+]], [[TYPE_INT]], i64 0}
+; CHECK: [[TYPE_INT]] = !{!"int", [[TYPE_CHAR:![0-9]+]]}
+; CHECK: [[TYPE_CHAR]] = !{!"omnipotent char", !{{[0-9]+}}}
+; CHECK: [[TAG_FLOAT]] = !{[[TYPE_FLOAT:![0-9]+]], [[TYPE_FLOAT]], i64 0}
+; CHECK: [[TYPE_FLOAT]] = !{!"float", [[TYPE_CHAR]]}
+; The immutability flag (i64 1) is preserved; the already struct-path tag is unchanged.
+; CHECK: [[TS2]] = !{i64 0, i64 4, [[TAG_CONST:![0-9]+]], i64 4, i64 4, [[TAG_DOUBLE:![0-9]+]]}
+; CHECK: [[TAG_CONST]] = !{[[TYPE_CONST:![0-9]+]], [[TYPE_CONST]], i64 0, i64 1}
+; CHECK: [[TYPE_CONST]] = !{!"const int", [[TYPE_CHAR]]}
+; CHECK: [[TAG_DOUBLE]] = !{[[TYPE_DOUBLE:![0-9]+]], [[TYPE_DOUBLE]], i64 0}
+; CHECK: [[TYPE_DOUBLE]] = !{!"double", [[TYPE_CHAR]]}
>From 02b4f236b363151e764f8865ca763788a8f32987 Mon Sep 17 00:00:00 2001
From: Abhay Kanhere <a_kanhere at apple.com>
Date: Thu, 24 Sep 2026 13:22:26 -0700
Subject: [PATCH 2/3] [AutoUpgrade] Restrict !tbaa.struct field-tag upgrade to
bitcode
Address review: textual IR does not need upgrading, so drop the LLParser
path and upgrade !tbaa.struct field tags only when reading bitcode. Switch
the test to a checked-in .bc and cover more carrying instructions (memcpy,
memmove, load, store, atomicrmw).
---
llvm/include/llvm/AsmParser/LLParser.h | 1 -
llvm/lib/AsmParser/LLParser.cpp | 10 -----
llvm/test/Bitcode/upgrade-tbaa-struct.ll | 42 +++++++++++++++-----
llvm/test/Bitcode/upgrade-tbaa-struct.ll.bc | Bin 0 -> 3108 bytes
4 files changed, 32 insertions(+), 21 deletions(-)
create mode 100644 llvm/test/Bitcode/upgrade-tbaa-struct.ll.bc
diff --git a/llvm/include/llvm/AsmParser/LLParser.h b/llvm/include/llvm/AsmParser/LLParser.h
index ccd8b61b119e3..7cc8e9877bbd0 100644
--- a/llvm/include/llvm/AsmParser/LLParser.h
+++ b/llvm/include/llvm/AsmParser/LLParser.h
@@ -120,7 +120,6 @@ namespace llvm {
SlotMapping *Slots;
SmallVector<Instruction*, 64> InstsWithTBAATag;
- SmallVector<Instruction *, 64> InstsWithTBAAStructTag;
/// DIAssignID metadata does not support temporary RAUW so we cannot use
/// the normal metadata forward reference resolution method. Instead,
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 30da28a7f0193..cc7633894fb74 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -550,14 +550,6 @@ bool LLParser::validateEndOfModule(bool UpgradeDebugInfo) {
}
}
- for (auto *Inst : InstsWithTBAAStructTag) {
- MDNode *MD = Inst->getMetadata(LLVMContext::MD_tbaa_struct);
- if (!MD)
- continue;
- if (MDNode *Upgraded = UpgradeTBAAStructNode(*MD); Upgraded != MD)
- Inst->setMetadata(LLVMContext::MD_tbaa_struct, Upgraded);
- }
-
// Look for intrinsic functions and CallInst that need to be upgraded. We use
// make_early_inc_range here because we may remove some functions.
for (Function &F : llvm::make_early_inc_range(*M))
@@ -2562,8 +2554,6 @@ bool LLParser::parseInstructionMetadata(Instruction &Inst) {
if (MDK == LLVMContext::MD_tbaa)
InstsWithTBAATag.push_back(&Inst);
- else if (MDK == LLVMContext::MD_tbaa_struct)
- InstsWithTBAAStructTag.push_back(&Inst);
// If this is the end of the list, we're done.
} while (EatIfPresent(lltok::comma));
diff --git a/llvm/test/Bitcode/upgrade-tbaa-struct.ll b/llvm/test/Bitcode/upgrade-tbaa-struct.ll
index 6e4cf0cced95e..c8e14fc260d22 100644
--- a/llvm/test/Bitcode/upgrade-tbaa-struct.ll
+++ b/llvm/test/Bitcode/upgrade-tbaa-struct.ll
@@ -1,23 +1,45 @@
-; RUN: llvm-as < %s | llvm-dis | FileCheck %s
-; RUN: verify-uselistorder < %s
+; Test that old-style scalar tags used as !tbaa.struct field tags in older
+; bitcode are auto-upgraded to the struct-path aware format on load, whatever
+; instruction carries the !tbaa.struct. Null and already struct-path field
+; tags are left unchanged; an immutability flag is kept.
+;
+; RUN: llvm-dis < %s.bc | FileCheck %s
+; RUN: verify-uselistorder < %s.bc
-; Old-style scalar tags used as !tbaa.struct field tags are auto-upgraded to
-; the struct-path aware format, like top-level !tbaa. Null and already
-; struct-path field tags are left unchanged; an immutability flag is kept.
-
-define void @copy(ptr %a, ptr %b) {
+define void @copy_memcpy(ptr %a, ptr %b) {
+; CHECK: call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 12, i1 false), !tbaa.struct [[TS:![0-9]+]]
call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 12, i1 false), !tbaa.struct !0
-; CHECK: !tbaa.struct [[TS:![0-9]+]]
ret void
}
+define void @copy_memmove(ptr %a, ptr %b) {
+; CHECK: call void @llvm.memmove.p0.p0.i64(ptr %a, ptr %b, i64 12, i1 false), !tbaa.struct [[TS]]
+ call void @llvm.memmove.p0.p0.i64(ptr %a, ptr %b, i64 12, i1 false), !tbaa.struct !0
+ ret void
+}
+
+define i32 @access_load_store(ptr %p) {
+; CHECK: %v = load i32, ptr %p, align 4, !tbaa.struct [[TS]]
+; CHECK: store i32 %v, ptr %p, align 4, !tbaa.struct [[TS]]
+ %v = load i32, ptr %p, align 4, !tbaa.struct !0
+ store i32 %v, ptr %p, align 4, !tbaa.struct !0
+ ret i32 %v
+}
+
+define i32 @access_atomicrmw(ptr %p, i32 %v) {
+; CHECK: %r = atomicrmw add ptr %p, i32 %v seq_cst, align 4, !tbaa.struct [[TS]]
+ %r = atomicrmw add ptr %p, i32 %v seq_cst, align 4, !tbaa.struct !0
+ ret i32 %r
+}
+
define void @copy_flag_and_structpath(ptr %a, ptr %b) {
- call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 8, i1 false), !tbaa.struct !5
-; CHECK: !tbaa.struct [[TS2:![0-9]+]]
+; CHECK: call void @llvm.memmove.p0.p0.i64(ptr %a, ptr %b, i64 8, i1 false), !tbaa.struct [[TS2:![0-9]+]]
+ call void @llvm.memmove.p0.p0.i64(ptr %a, ptr %b, i64 8, i1 false), !tbaa.struct !5
ret void
}
declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
+declare void @llvm.memmove.p0.p0.i64(ptr, ptr, i64, i1)
; Old-style 2-operand scalar field tags and a null field tag.
!0 = !{i64 0, i64 4, !1, i64 4, i64 4, !3, i64 8, i64 4, null}
diff --git a/llvm/test/Bitcode/upgrade-tbaa-struct.ll.bc b/llvm/test/Bitcode/upgrade-tbaa-struct.ll.bc
new file mode 100644
index 0000000000000000000000000000000000000000..0b85cec94aa1bf3288a30d220d14c8e993113e6e
GIT binary patch
literal 3108
zcmb7GeN0=|6~F$#Ho;s!64Kh``Q;hX$XZkKF!`{t-PwLAB~zw4X{OP36Fjg9Onf|y
z!$&$*HYPmMx}8&@ia)Z+tWniXmF9G5Mx|`UJW3tvWfXN8>sVwrK$D6DkJ72qqHgDz
zrpx~5)?L~6`d+{LyXXAQ at 0@o%?Bun5r3e)ugqpO>&hI|?yH{WM$A!nsQacaIECtA<
zMQB=%P?6k(U_ce{Rfj9ixKqkQD#BuWNj9W?us~y=l+QPXh)3m~=PHJF-an)<`OG}Q
zyj<!VBF;2k_6%!F3SYGPhUz|wm6X>V4QUOgm*u{crevqhRXakwC$o5l>MX~+$LLok
zT(yC))?gXdz5I}6NN+fVExzgcK+IH88+(v2)&x@{FUCv<hoef%UW8852w||PyhTa8
z;TbF}ISSpG?kR8Gmcm^JX9_%?U7FGdWM&qnOG54v)hxsGDC5jy#ArEMRmss2JwjVy
zf7#D6|AeN_l%j8=FHkJ>h^C!Wx{3U!i7i*U<a6#uJUQ$mLdw_VJ!n6nl;x7cuV_$>
zCM{dw^>S~)3POhfPXTz_MqK)l!h>GD5}^l7hw=NN-(UPq!^ZmAFSfpV^ZJ3e?)*~x
z!#eZU;?JKKvscen{^}<;EB8NLajLNNP1yX6+TaVfzSECi|C8~~{%zyGRrLL at O~dt*
z<@Y|b8!^*Q>1FpUHOfM!tJ_QNSwTfedwvdm>)xgNkiID^+jZ}f1T}bSi%d>`wOWrF
zN4|&elPg1CEhSKBS{0sp2W0dlt%79>HAWap4#%Q}yB?cSvTu}xJmwJy#(Cgy9~f4x
z36axTvZYk!9AT|PV$>5-5A>^h#=5mDNOz0C8zEe+^-xnu<CSr;g(=8C7AZ?BoGI2B
zRXEfA(IBsWMx!366L?;Il2`Qh3p_0t(j|B`hO>;WlhIwz;hYy&6Vt|PCUU`KoZ_e!
z=Cu7%#6HK`E+`zAB90-2J)JA<ZB#$gsy@&v1fUNId`#dQ)xBnQ at 8<;o+ZPfVG(xvt
z2#g5>W8vMmbNF@!e>RC%8AVfSoLm|w)A at dpBWF$Ibl5n{sjkLYTZ*-f<@*WII?7r{
z6!uYZ4;*@D(EfqKo)ER~wh4T_5a1)hR&{@)5Y!97xL~;Qgzh%dt$XoO3}1KYvNT==
zFKDxIF-c9isd*E*7^W68<Wko7iHvH|AF(FbnzIpm+Pm{hM;e8`es%xYk;5A?ox}k3
zBWji-Z<vhNlE!Cclw`2UnB!E(PDQL~(Vk$PK**gb#}aEFfvFgMXA5{L^npDZ^+~fj
zFc$v7bpo$W;$<)Xl&MJ0yQ!t@{R>&+H87ygU{6Gx7b0atqBY9e(xPJ`X-kRVqa$5+
zp<AN{tGa=}dcp9Q8NAx4yOmMpXx%cSTc&k?_u at _hUuQ5(Kh3CaX7G|1f6i2Vw91iF
zVdFyf{#BE4#blf|86ko<OgmcWpV}|6&IyHWG-6BFUxMg^vnRpMI-!pj4DWr6*BD(k
zgKxTYH{)=MC{y&jrUqXc#y~0(!@)TSWq8PK%ZNao6C#y%O~;M1<Hn4ex|Sqcb~ZCO
zE5%m_Aj=GEik#4^d+LOSxbWi;>^(m!b3{eQsA!#IYd}tEU`$(Q+V0^fF!f5(cr;wv
za`-rd*J#~ZMz!YEZAegfIip&kb=f&^_7zv8w^co$5e!Ekm=Nut!*i at P4IC<Lv4|tB
zZ~&R3qPDhp2BZs$8YiC(Q|mH_<M10QP$1wyEY at iJ2~)vEfaLzTa55%I)NmL;Ac*#;
zxMxnZzs}kw#OO@%Ja`v2&U55Eh{r|Ef}7^93|?!*IR>v15LR8a-m1?l|MLRibHFMD
zK#h-+=OUnxnh8*dyyl$f0L&EoNP1!^PA(+LXSx5BR at Rt-TnJP1<KzlgTc!TkD>+_G
z)odmg;Oo^vv(VrYAb(Geo%v(fnm4s(!tI=3YsMsS`#FVkDN;5Wfef{sld?wp4&LP9
zikq5}QFGkz3H2>6-XQQ2)CvN>4O(LGMhvfI at Y@M2sfdY)5k4;TwL)5{57Y at gywC^y
z at QQ$063jrW<SC?l9}T2smt-}Np_8mNp|D>Pt!cIfG9rCrgC;)=lUHQaC&}Vj*$!}R
zCQQwS$wgZFF`on)ix(gt!CBb=jSvO3?<J~^W=FJ!LZ2^nnGVCtthTmxTi6qi{cSp>
zv3Z80<?aO3Kyll4)Ycj7>ga6ayMq4CAl=-`1)gZ@;M at H)yN7+~A^Mod?QUuB;(`^L
znX17?x<XTHVVN|oNohT?G)-LA9^%Zy=SivLqF+F5{XUFE&+$-7tm?jcR}_+2VcXsR
zHAO1<D25DNZp`-?eBFyTYt7p^yq+t%?bSiT7eyr~;L9u&2vX^sV4c9xZtEgcpQI6x
z)0}LtZW%$H(q$oAaz&rIbfEhzkCzj1AQvi89QN8ih}feLONDcH>lKdtFhnf at aU2D5
zoX;8;Id?T);qhk#UUx|mU5D*1U6H;YVkT7(sTe^x1GG@^t}V)zfg%@J+wR0n*eJau
zlEqLNXP^&LH%#P=%m_i+RLp&3&ZS!?@MkXFjYOzk=w^gqeGZtJh&V?hj<ZsFK&Dye
zB94SOcv`C9o1q0L$*}R_71NFn-Q=~f5ux`9ge0=nX$NG**}OaPhy$b(6Q%bpXGTbR
z%T{Ox6D}B~dzJ5$`+zjES^_DP=*Wm$Q_s_z|IHA}ivWpaO`G$lRq=Y5=G!;GI`scw
z!F3Ppl5b6$J<L-CsgZ1&A&y-n9GmA$cN^*ai(2>jyaCWjHWb4M{+w3}gfdj3eOQB)
z`FjxTy-FO+Z~t2Rr90(aE+l?}u#n|8G0PuI#g1&5R-T4Gn!7rCf;41<uj at opyB}>+
zvVUgwUjDV4f2o))-Ch=*3Tas|_)8Ams`3BIVGNE!?k_nl8b*vXms&Ty89xgq%7 at Tj
zm3s7eNFFJ$5>JMdap|HA?T0{=4aTjC(KjWVo4fddh7Ny6Ge2<mXGd4BpKEUR_w+PC
zcKRB6f?a{T3mjy0TXUeJFaK~$J9oT+>y#b|oM;a6T(Gshy|<%s6R(nIq)*%ay>}NS
z<bSVP_Es{L%<(oT4GdH5xB7im)_v9%W^WbDZB;EcOO at Yups8wKmEX3{Z`t3>NjQ6g
l{+{3-Pg}6L%je&7f<GSMeEx at nO&s^|rWKX#?UJL={sj;Z`(Xe8
literal 0
HcmV?d00001
>From 24c76bed7a98109e8b5d2897ef2452c17f517ec5 Mon Sep 17 00:00:00 2001
From: Abhay Kanhere <a_kanhere at apple.com>
Date: Fri, 25 Sep 2026 11:49:07 -0700
Subject: [PATCH 3/3] [test] updated RUN lines for test
updated run lines for test
---
llvm/test/Bitcode/upgrade-tbaa-struct.ll | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/test/Bitcode/upgrade-tbaa-struct.ll b/llvm/test/Bitcode/upgrade-tbaa-struct.ll
index c8e14fc260d22..d3c71ab22a1e4 100644
--- a/llvm/test/Bitcode/upgrade-tbaa-struct.ll
+++ b/llvm/test/Bitcode/upgrade-tbaa-struct.ll
@@ -1,10 +1,10 @@
+; RUN: llvm-dis < %s.bc | FileCheck %s
+; RUN: verify-uselistorder < %s.bc
; Test that old-style scalar tags used as !tbaa.struct field tags in older
; bitcode are auto-upgraded to the struct-path aware format on load, whatever
; instruction carries the !tbaa.struct. Null and already struct-path field
; tags are left unchanged; an immutability flag is kept.
;
-; RUN: llvm-dis < %s.bc | FileCheck %s
-; RUN: verify-uselistorder < %s.bc
define void @copy_memcpy(ptr %a, ptr %b) {
; CHECK: call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 12, i1 false), !tbaa.struct [[TS:![0-9]+]]
More information about the llvm-commits
mailing list