[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