diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td index 7c62096e5aa..6d008f3e3bf 100644 --- a/include/llvm/Intrinsics.td +++ b/include/llvm/Intrinsics.td @@ -261,6 +261,7 @@ let Properties = [IntrNoMem] in { // // None of these intrinsics accesses memory at all. +let Properties = [IntrNoMem] in { def int_dbg_stoppoint : Intrinsic<[llvm_void_ty], [llvm_i32_ty, llvm_i32_ty, llvm_descriptor_ty]>; @@ -269,6 +270,7 @@ let Properties = [IntrNoMem] in { def int_dbg_func_start : Intrinsic<[llvm_void_ty], [llvm_descriptor_ty]>; def int_dbg_declare : Intrinsic<[llvm_void_ty], [llvm_descriptor_ty, llvm_descriptor_ty]>; +} //===------------------ Exception Handling Intrinsics----------------------===// // diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp index bdf8029b18e..bfea2b27841 100644 --- a/lib/Transforms/Scalar/ADCE.cpp +++ b/lib/Transforms/Scalar/ADCE.cpp @@ -18,6 +18,7 @@ #include "llvm/Transforms/Scalar.h" #include "llvm/BasicBlock.h" #include "llvm/Instructions.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Pass.h" #include "llvm/Support/CFG.h" #include "llvm/Support/Compiler.h" @@ -55,6 +56,7 @@ bool ADCE::runOnFunction(Function& F) { // Collect the set of "root" instructions that are known live. for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) if (isa(I.getInstructionIterator()) || + isa(I.getInstructionIterator()) || I->mayWriteToMemory()) { alive.insert(I.getInstructionIterator()); worklist.push_back(I.getInstructionIterator());