[LLVMdev] How to test isDereferenceablePointer?

Philip Reames listmail at philipreames.com
Mon Jan 19 16:53:20 PST 2015


T.M.K., there's no direct way to test it.  You have to construct a 
transformation which happens with the information you added and not 
otherwise.

The easiest case might be LICM.

Philip

On 01/17/2015 11:25 AM, Ramkumar Ramachandra wrote:
> I'm have a
>      [PATCH] isDereferenceablePointer: look through gc.relocates
>
> and I want to know how to test this patch. So far, I've found one
> candiate: speculative execution in SimplifyCFG
> (test/Transforms/SimplifyCFG/SpeculativeExec.ll). However, it's
> somewhat involved to show that SimplifyCFG does kick in for
> gc.relocate. Is there a better way to directly test it?
>
> Signed-off-by: Ramkumar Ramachandra <artagnon at gmail.com>
> ---
>   lib/IR/Value.cpp | 9 +++++++++
>   1 file changed, 9 insertions(+)
>
> diff --git a/lib/IR/Value.cpp b/lib/IR/Value.cpp
> index 5f7e258..aa701d5 100644
> --- a/lib/IR/Value.cpp
> +++ b/lib/IR/Value.cpp
> @@ -23,8 +23,10 @@
>   #include "llvm/IR/GetElementPtrTypeIterator.h"
>   #include "llvm/IR/InstrTypes.h"
>   #include "llvm/IR/Instructions.h"
> +#include "llvm/IR/IntrinsicInst.h"
>   #include "llvm/IR/Module.h"
>   #include "llvm/IR/Operator.h"
> +#include "llvm/IR/Statepoint.h"
>   #include "llvm/IR/ValueHandle.h"
>   #include "llvm/IR/ValueSymbolTable.h"
>   #include "llvm/Support/Debug.h"
> @@ -570,6 +572,13 @@ static bool isDereferenceablePointer(const Value *V, const DataLayout *DL,
>       return true;
>     }
>   
> +  // For gc.relocate, look through relocations
> +  if (const IntrinsicInst *I = dyn_cast<IntrinsicInst>(V))
> +    if (I->getIntrinsicID() == Intrinsic::experimental_gc_relocate) {
> +      GCRelocateOperands RelocateInst(I);
> +      return isDereferenceablePointer(RelocateInst.derivedPtr(), DL, Visited);
> +    }
> +
>     if (const AddrSpaceCastInst *ASC = dyn_cast<AddrSpaceCastInst>(V))
>       return isDereferenceablePointer(ASC->getOperand(0), DL, Visited);
>   




More information about the llvm-dev mailing list