[llvm] [msan] Add handleIntrinsicByApplyingToShadow; support NEON tbl/tbx (PR #114490)
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 1 11:17:19 PDT 2024
================
@@ -4319,6 +4355,28 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
break;
}
+ // Arm NEON vector table intrinsics have the source/table register(s) as
+ // arguments, followed by the index register. They return the output.
+ //
+ // 'TBL writes a zero if an index is out-of-range, while TBX leaves the
+ // original value unchanged in the destination register.'
+ // Conveniently, zero denotes a clean shadow, which means out-of-range
+ // indices for TBL will initialize the user data with zero and also clean
+ // the shadow. (For TBX, neither the user data nor the shadow will be
+ // updated, which is also correct.)
+ case Intrinsic::aarch64_neon_tbl1:
+ case Intrinsic::aarch64_neon_tbl2:
+ case Intrinsic::aarch64_neon_tbl3:
+ case Intrinsic::aarch64_neon_tbl4:
+ case Intrinsic::aarch64_neon_tbx1:
+ case Intrinsic::aarch64_neon_tbx2:
+ case Intrinsic::aarch64_neon_tbx3:
+ case Intrinsic::aarch64_neon_tbx4: {
+ // The last trailing argument (index register) should be handled verbatim
+ handleIntrinsicByApplyingToShadow(I, 1);
----------------
vitalybuka wrote:
why do we need parameter if it's always 1?
https://github.com/llvm/llvm-project/pull/114490
More information about the llvm-commits
mailing list