@@ -4209,15 +4209,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
42094209
42104210 // Instrument AVX permutation intrinsic.
42114211 // We apply the same permutation (argument index 1) to the shadow.
4212- void handleAVXPermutation (IntrinsicInst &I) {
4213- assert (I.arg_size () == 2 );
4214- assert (isa<FixedVectorType>(I.getArgOperand (0 )->getType ()));
4215- assert (isa<FixedVectorType>(I.getArgOperand (1 )->getType ()));
4216- [[maybe_unused]] auto ArgVectorSize =
4217- cast<FixedVectorType>(I.getArgOperand (0 )->getType ())->getNumElements ();
4218- assert (cast<FixedVectorType>(I.getArgOperand (1 )->getType ())
4219- ->getNumElements () == ArgVectorSize);
4220- assert (I.getType () == I.getArgOperand (0 )->getType ());
4212+ void handleAVXVpermilvar (IntrinsicInst &I) {
42214213 IRBuilder<> IRB (&I);
42224214 Value *Shadow = getShadow (&I, 0 );
42234215 insertShadowCheck (I.getArgOperand (1 ), &I);
@@ -4231,38 +4223,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
42314223 setShadow (&I, IRB.CreateBitCast (CI, getShadowTy (&I)));
42324224 setOriginForNaryOp (I);
42334225 }
4234- // Instrument AVX permutation intrinsic.
4235- // We apply the same permutation (argument index 1) to the shadows.
4236- void handleAVXVpermil2var (IntrinsicInst &I) {
4237- assert (I.arg_size () == 3 );
4238- assert (isa<FixedVectorType>(I.getArgOperand (0 )->getType ()));
4239- assert (isa<FixedVectorType>(I.getArgOperand (1 )->getType ()));
4240- assert (isa<FixedVectorType>(I.getArgOperand (2 )->getType ()));
4241- [[maybe_unused]] auto ArgVectorSize =
4242- cast<FixedVectorType>(I.getArgOperand (0 )->getType ())->getNumElements ();
4243- assert (cast<FixedVectorType>(I.getArgOperand (1 )->getType ())
4244- ->getNumElements () == ArgVectorSize);
4245- assert (cast<FixedVectorType>(I.getArgOperand (2 )->getType ())
4246- ->getNumElements () == ArgVectorSize);
4247- assert (I.getArgOperand (0 )->getType () == I.getArgOperand (2 )->getType ());
4248- assert (I.getType () == I.getArgOperand (0 )->getType ());
4249- assert (I.getArgOperand (1 )->getType ()->isIntOrIntVectorTy ());
4250- IRBuilder<> IRB (&I);
4251- Value *AShadow = getShadow (&I, 0 );
4252- Value *Idx = I.getArgOperand (1 );
4253- Value *BShadow = getShadow (&I, 2 );
4254- insertShadowCheck (Idx, &I);
4255-
4256- // Shadows are integer-ish types but some intrinsics require a
4257- // different (e.g., floating-point) type.
4258- AShadow = IRB.CreateBitCast (AShadow, I.getArgOperand (0 )->getType ());
4259- BShadow = IRB.CreateBitCast (BShadow, I.getArgOperand (2 )->getType ());
4260- CallInst *CI = IRB.CreateIntrinsic (I.getType (), I.getIntrinsicID (),
4261- {AShadow, Idx, BShadow});
4262-
4263- setShadow (&I, IRB.CreateBitCast (CI, getShadowTy (&I)));
4264- setOriginForNaryOp (I);
4265- }
42664226
42674227 // Instrument BMI / BMI2 intrinsics.
42684228 // All of these intrinsics are Z = I(X, Y)
@@ -5208,52 +5168,16 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
52085168 assert (Success);
52095169 break ;
52105170 }
5211- case Intrinsic::x86_avx2_permd:
5212- case Intrinsic::x86_avx2_permps:
5213- case Intrinsic::x86_ssse3_pshuf_b_128:
5214- case Intrinsic::x86_avx2_pshuf_b:
5215- case Intrinsic::x86_avx512_pshuf_b_512:
5216- case Intrinsic::x86_avx512_permvar_df_256:
5217- case Intrinsic::x86_avx512_permvar_df_512:
5218- case Intrinsic::x86_avx512_permvar_di_256:
5219- case Intrinsic::x86_avx512_permvar_di_512:
5220- case Intrinsic::x86_avx512_permvar_hi_128:
5221- case Intrinsic::x86_avx512_permvar_hi_256:
5222- case Intrinsic::x86_avx512_permvar_hi_512:
5223- case Intrinsic::x86_avx512_permvar_qi_128:
5224- case Intrinsic::x86_avx512_permvar_qi_256:
5225- case Intrinsic::x86_avx512_permvar_qi_512:
5226- case Intrinsic::x86_avx512_permvar_sf_512:
5227- case Intrinsic::x86_avx512_permvar_si_512:
5171+
52285172 case Intrinsic::x86_avx_vpermilvar_pd:
52295173 case Intrinsic::x86_avx_vpermilvar_pd_256:
52305174 case Intrinsic::x86_avx512_vpermilvar_pd_512:
52315175 case Intrinsic::x86_avx_vpermilvar_ps:
52325176 case Intrinsic::x86_avx_vpermilvar_ps_256:
52335177 case Intrinsic::x86_avx512_vpermilvar_ps_512: {
5234- handleAVXPermutation (I);
5178+ handleAVXVpermilvar (I);
52355179 break ;
52365180 }
5237- case Intrinsic::x86_avx512_vpermi2var_d_128:
5238- case Intrinsic::x86_avx512_vpermi2var_d_256:
5239- case Intrinsic::x86_avx512_vpermi2var_d_512:
5240- case Intrinsic::x86_avx512_vpermi2var_hi_128:
5241- case Intrinsic::x86_avx512_vpermi2var_hi_256:
5242- case Intrinsic::x86_avx512_vpermi2var_hi_512:
5243- case Intrinsic::x86_avx512_vpermi2var_pd_128:
5244- case Intrinsic::x86_avx512_vpermi2var_pd_256:
5245- case Intrinsic::x86_avx512_vpermi2var_pd_512:
5246- case Intrinsic::x86_avx512_vpermi2var_ps_128:
5247- case Intrinsic::x86_avx512_vpermi2var_ps_256:
5248- case Intrinsic::x86_avx512_vpermi2var_ps_512:
5249- case Intrinsic::x86_avx512_vpermi2var_q_128:
5250- case Intrinsic::x86_avx512_vpermi2var_q_256:
5251- case Intrinsic::x86_avx512_vpermi2var_q_512:
5252- case Intrinsic::x86_avx512_vpermi2var_qi_128:
5253- case Intrinsic::x86_avx512_vpermi2var_qi_256:
5254- case Intrinsic::x86_avx512_vpermi2var_qi_512:
5255- handleAVXVpermil2var (I);
5256- break ;
52575181
52585182 case Intrinsic::x86_avx512fp16_mask_add_sh_round:
52595183 case Intrinsic::x86_avx512fp16_mask_sub_sh_round:
0 commit comments