@@ -203,7 +203,7 @@ Value *RandomIRBuilder::newSource(BasicBlock &BB, ArrayRef<Instruction *> Insts,
203
203
RS.sample (Pred.generate (Srcs, KnownTypes));
204
204
205
205
// If we can find a pointer to load from, use it half the time.
206
- Value *Ptr = findPointer (BB, Insts, Srcs, Pred );
206
+ Value *Ptr = findPointer (BB, Insts);
207
207
if (Ptr) {
208
208
// Create load from the chosen pointer
209
209
auto IP = BB.getFirstInsertionPt ();
@@ -363,7 +363,7 @@ Instruction *RandomIRBuilder::connectToSink(BasicBlock &BB,
363
363
364
364
Instruction *RandomIRBuilder::newSink (BasicBlock &BB,
365
365
ArrayRef<Instruction *> Insts, Value *V) {
366
- Value *Ptr = findPointer (BB, Insts, {V}, matchFirstType () );
366
+ Value *Ptr = findPointer (BB, Insts);
367
367
if (!Ptr) {
368
368
if (uniform (Rand, 0 , 1 )) {
369
369
Type *Ty = V->getType ();
@@ -377,27 +377,14 @@ Instruction *RandomIRBuilder::newSink(BasicBlock &BB,
377
377
}
378
378
379
379
Value *RandomIRBuilder::findPointer (BasicBlock &BB,
380
- ArrayRef<Instruction *> Insts,
381
- ArrayRef<Value *> Srcs, SourcePred Pred) {
382
- auto IsMatchingPtr = [&Srcs, &Pred](Instruction *Inst) {
380
+ ArrayRef<Instruction *> Insts) {
381
+ auto IsMatchingPtr = [](Instruction *Inst) {
383
382
// Invoke instructions sometimes produce valid pointers but currently
384
383
// we can't insert loads or stores from them
385
384
if (Inst->isTerminator ())
386
385
return false ;
387
386
388
- if (auto *PtrTy = dyn_cast<PointerType>(Inst->getType ())) {
389
- if (PtrTy->isOpaque ())
390
- return true ;
391
-
392
- // We can never generate loads from non first class or non sized types
393
- Type *ElemTy = PtrTy->getNonOpaquePointerElementType ();
394
- if (!ElemTy->isSized () || !ElemTy->isFirstClassType ())
395
- return false ;
396
-
397
- // TODO: Check if this is horribly expensive.
398
- return Pred.matches (Srcs, UndefValue::get (ElemTy));
399
- }
400
- return false ;
387
+ return Inst->getType ()->isPointerTy ();
401
388
};
402
389
if (auto RS = makeSampler (Rand, make_filter_range (Insts, IsMatchingPtr)))
403
390
return RS.getSelection ();
0 commit comments