Skip to content

Commit 3a0c33a

Browse files
authored
[msan] Handle Arm NEON pairwise min/max instructions (#129824)
Change the handling of: - llvm.aarch64.neon.fmaxp - llvm.aarch64.neon.fminp - llvm.aarch64.neon.fmaxnmp - llvm.aarch64.neon.fminnmp - llvm.aarch64.neon.smaxp - llvm.aarch64.neon.sminp - llvm.aarch64.neon.umaxp - llvm.aarch64.neon.uminp from the incorrect heuristic handler (maybeHandleSimpleNomemIntrinsic) to handlePairwiseShadowOrIntrinsic. Updates the tests from #129760 Adds a note that maybeHandleSimpleNomemIntrinsic may incorrectly match horizontal/pairwise intrinsics.
1 parent 0715c6c commit 3a0c33a

File tree

2 files changed

+125
-40
lines changed

2 files changed

+125
-40
lines changed

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3129,6 +3129,9 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
31293129
/// fine).
31303130
///
31313131
/// Caller guarantees that this intrinsic does not access memory.
3132+
///
3133+
/// TODO: "horizontal"/"pairwise" intrinsics are often incorrectly matched by
3134+
/// by this handler.
31323135
[[maybe_unused]] bool
31333136
maybeHandleSimpleNomemIntrinsic(IntrinsicInst &I,
31343137
unsigned int trailingFlags) {
@@ -4871,6 +4874,18 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
48714874
setOrigin(&I, getCleanOrigin());
48724875
break;
48734876

4877+
// TODO: handling max/min similarly to AND/OR may be more precise
4878+
// Floating-Point Maximum/Minimum Pairwise
4879+
case Intrinsic::aarch64_neon_fmaxp:
4880+
case Intrinsic::aarch64_neon_fminp:
4881+
// Floating-Point Maximum/Minimum Number Pairwise
4882+
case Intrinsic::aarch64_neon_fmaxnmp:
4883+
case Intrinsic::aarch64_neon_fminnmp:
4884+
// Signed/Unsigned Maximum/Minimum Pairwise
4885+
case Intrinsic::aarch64_neon_smaxp:
4886+
case Intrinsic::aarch64_neon_sminp:
4887+
case Intrinsic::aarch64_neon_umaxp:
4888+
case Intrinsic::aarch64_neon_uminp:
48744889
// Add Pairwise
48754890
case Intrinsic::aarch64_neon_addp:
48764891
// Floating-point Add Pairwise

0 commit comments

Comments
 (0)