Skip to content

Commit 35a4aff

Browse files
committed
Address feedback
and undo NFC movement of case
1 parent df8d598 commit 35a4aff

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3440,16 +3440,19 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
34403440
assert(isa<FixedVectorType>(I.getType()));
34413441

34423442
Value *FullShadow = getCleanShadow(&I);
3443-
assert(cast<FixedVectorType>(Shadow->getType())->getNumElements() <=
3444-
cast<FixedVectorType>(FullShadow->getType())->getNumElements());
3443+
unsigned ShadowNumElems =
3444+
cast<FixedVectorType>(Shadow->getType())->getNumElements();
3445+
unsigned FullShadowNumElems =
3446+
cast<FixedVectorType>(FullShadow->getType())->getNumElements();
34453447

3446-
if (cast<FixedVectorType>(Shadow->getType())->getNumElements() ==
3447-
cast<FixedVectorType>(FullShadow->getType())->getNumElements()) {
3448+
assert((ShadowNumElems == FullShadowNumElems) ||
3449+
(ShadowNumElems * 2 == FullShadowNumElems));
3450+
3451+
if (ShadowNumElems == FullShadowNumElems) {
34483452
FullShadow = Shadow;
34493453
} else {
34503454
// TODO: generalize beyond 2x?
3451-
SmallVector<int, 32> ShadowMask(
3452-
cast<FixedVectorType>(FullShadow->getType())->getNumElements());
3455+
SmallVector<int, 32> ShadowMask(FullShadowNumElems);
34533456
std::iota(ShadowMask.begin(), ShadowMask.end(), 0);
34543457

34553458
// Append zeros
@@ -5405,16 +5408,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
54055408
break;
54065409
}
54075410

5408-
// Convert Packed Single Precision Floating-Point Values
5409-
// to Packed Signed Doubleword Integer Values
5410-
//
5411-
// <16 x i32> @llvm.x86.avx512.mask.cvtps2dq.512
5412-
// (<16 x float>, <16 x i32>, i16, i32)
5413-
case Intrinsic::x86_avx512_mask_cvtps2dq_512: {
5414-
handleAVX512VectorConvertFPToInt(I, /*LastMask=*/false);
5415-
break;
5416-
}
5417-
54185411
// Convert Single-Precision FP Value to 16-bit FP Value
54195412
// <16 x i16> @llvm.x86.avx512.mask.vcvtps2ph.512
54205413
// (<16 x float>, i32, <16 x i16>, i16)
@@ -5995,6 +5988,15 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
59955988
/*trailingVerbatimArgs=*/1);
59965989
break;
59975990

5991+
// Convert Packed Single Precision Floating-Point Values
5992+
// to Packed Signed Doubleword Integer Values
5993+
//
5994+
// <16 x i32> @llvm.x86.avx512.mask.cvtps2dq.512
5995+
// (<16 x float>, <16 x i32>, i16, i32)
5996+
case Intrinsic::x86_avx512_mask_cvtps2dq_512:
5997+
handleAVX512VectorConvertFPToInt(I, /*LastMask=*/false);
5998+
break;
5999+
59986000
// AVX512 PMOV: Packed MOV, with truncation
59996001
// Precisely handled by applying the same intrinsic to the shadow
60006002
case Intrinsic::x86_avx512_mask_pmov_dw_512:

0 commit comments

Comments
 (0)