[LLVMdev] How to test isDereferenceablePointer?
Ramkumar Ramachandra
artagnon at gmail.com
Sat Jan 17 11:25:40 PST 2015
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);
--
2.2.1
More information about the llvm-dev
mailing list