@@ -4209,15 +4209,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
4209
4209
4210
4210
// Instrument AVX permutation intrinsic.
4211
4211
// 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) {
4221
4213
IRBuilder<> IRB (&I);
4222
4214
Value *Shadow = getShadow (&I, 0 );
4223
4215
insertShadowCheck (I.getArgOperand (1 ), &I);
@@ -4231,38 +4223,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
4231
4223
setShadow (&I, IRB.CreateBitCast (CI, getShadowTy (&I)));
4232
4224
setOriginForNaryOp (I);
4233
4225
}
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
- }
4266
4226
4267
4227
// Instrument BMI / BMI2 intrinsics.
4268
4228
// All of these intrinsics are Z = I(X, Y)
@@ -5208,52 +5168,16 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
5208
5168
assert (Success);
5209
5169
break ;
5210
5170
}
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
+
5228
5172
case Intrinsic::x86_avx_vpermilvar_pd:
5229
5173
case Intrinsic::x86_avx_vpermilvar_pd_256:
5230
5174
case Intrinsic::x86_avx512_vpermilvar_pd_512:
5231
5175
case Intrinsic::x86_avx_vpermilvar_ps:
5232
5176
case Intrinsic::x86_avx_vpermilvar_ps_256:
5233
5177
case Intrinsic::x86_avx512_vpermilvar_ps_512: {
5234
- handleAVXPermutation (I);
5178
+ handleAVXVpermilvar (I);
5235
5179
break ;
5236
5180
}
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 ;
5257
5181
5258
5182
case Intrinsic::x86_avx512fp16_mask_add_sh_round:
5259
5183
case Intrinsic::x86_avx512fp16_mask_sub_sh_round:
0 commit comments