[PATCH] D21357: [CrossDSOCFI] Change the pass so that it doesn't require doInitialization()
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 7 16:02:16 PDT 2016
davide updated this revision to Diff 63152.
davide added a comment.
Rebased now that Peter patches landed upstream
http://reviews.llvm.org/D21357
Files:
lib/Transforms/IPO/CrossDSOCFI.cpp
Index: lib/Transforms/IPO/CrossDSOCFI.cpp
===================================================================
--- lib/Transforms/IPO/CrossDSOCFI.cpp
+++ lib/Transforms/IPO/CrossDSOCFI.cpp
@@ -50,9 +50,7 @@
MDNode *VeryLikelyWeights;
ConstantInt *extractNumericTypeId(MDNode *MD);
- void buildCFICheck();
-
- bool doInitialization(Module &M) override;
+ void buildCFICheck(Module &M);
bool runOnModule(Module &M) override;
};
@@ -65,14 +63,6 @@
ModulePass *llvm::createCrossDSOCFIPass() { return new CrossDSOCFI; }
-bool CrossDSOCFI::doInitialization(Module &Mod) {
- M = &Mod;
- VeryLikelyWeights =
- MDBuilder(M->getContext()).createBranchWeights((1U << 20) - 1, 1);
-
- return false;
-}
-
/// Extracts a numeric type identifier from an MDNode containing type metadata.
ConstantInt *CrossDSOCFI::extractNumericTypeId(MDNode *MD) {
// This check excludes vtables for classes inside anonymous namespaces.
@@ -88,12 +78,12 @@
}
/// buildCFICheck - emits __cfi_check for the current module.
-void CrossDSOCFI::buildCFICheck() {
+void CrossDSOCFI::buildCFICheck(Module &M) {
// FIXME: verify that __cfi_check ends up near the end of the code section,
// but before the jump slots created in LowerTypeTests.
llvm::DenseSet<uint64_t> TypeIds;
SmallVector<MDNode *, 2> Types;
- for (GlobalObject &GO : M->global_objects()) {
+ for (GlobalObject &GO : M.global_objects()) {
Types.clear();
GO.getMetadata(LLVMContext::MD_type, Types);
for (MDNode *Type : Types) {
@@ -105,8 +95,8 @@
}
}
- LLVMContext &Ctx = M->getContext();
- Constant *C = M->getOrInsertFunction(
+ LLVMContext &Ctx = M.getContext();
+ Constant *C = M.getOrInsertFunction(
"__cfi_check", Type::getVoidTy(Ctx), Type::getInt64Ty(Ctx),
Type::getInt8PtrTy(Ctx), Type::getInt8PtrTy(Ctx), nullptr);
Function *F = dyn_cast<Function>(C);
@@ -125,7 +115,7 @@
BasicBlock *TrapBB = BasicBlock::Create(Ctx, "fail", F);
IRBuilder<> IRBFail(TrapBB);
- Constant *CFICheckFailFn = M->getOrInsertFunction(
+ Constant *CFICheckFailFn = M.getOrInsertFunction(
"__cfi_check_fail", Type::getVoidTy(Ctx), Type::getInt8PtrTy(Ctx),
Type::getInt8PtrTy(Ctx), nullptr);
IRBFail.CreateCall(CFICheckFailFn, {&CFICheckFailData, &Addr});
@@ -140,7 +130,7 @@
ConstantInt *CaseTypeId = ConstantInt::get(Type::getInt64Ty(Ctx), TypeId);
BasicBlock *TestBB = BasicBlock::Create(Ctx, "test", F);
IRBuilder<> IRBTest(TestBB);
- Function *BitsetTestFn = Intrinsic::getDeclaration(M, Intrinsic::type_test);
+ Function *BitsetTestFn = Intrinsic::getDeclaration(&M, Intrinsic::type_test);
Value *Test = IRBTest.CreateCall(
BitsetTestFn, {&Addr, MetadataAsValue::get(
@@ -157,8 +147,10 @@
if (skipModule(M))
return false;
+ VeryLikelyWeights =
+ MDBuilder(M.getContext()).createBranchWeights((1U << 20) - 1, 1);
if (M.getModuleFlag("Cross-DSO CFI") == nullptr)
return false;
- buildCFICheck();
+ buildCFICheck(M);
return true;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21357.63152.patch
Type: text/x-patch
Size: 3036 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160707/2a77bc0a/attachment.bin>
More information about the llvm-commits
mailing list