about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorMartin Nowack <martin.nowack@gmail.com>2018-05-08 11:27:00 +0100
committerCristian Cadar <c.cadar@imperial.ac.uk>2018-05-09 10:44:27 +0100
commit8affd4a2dfbb08d820387f8e28f95a3a7276b710 (patch)
tree959953ca65b243e033be394e6f5f8285bd32c303
parentbf287fa76dc82b4fc6cf2fae2cbe8e6134ee2479 (diff)
downloadklee-8affd4a2dfbb08d820387f8e28f95a3a7276b710.tar.gz
Remove workaround for bug in older LLVM version (< 3)
-rw-r--r--lib/Module/IntrinsicCleaner.cpp3
-rw-r--r--lib/Module/KModule.cpp7
-rw-r--r--lib/Module/Passes.h10
3 files changed, 6 insertions, 14 deletions
diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp
index b0260520..10b5df08 100644
--- a/lib/Module/IntrinsicCleaner.cpp
+++ b/lib/Module/IntrinsicCleaner.cpp
@@ -233,8 +233,7 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) {
         break;
       }
       default:
-        if (LowerIntrinsics)
-          IL->LowerIntrinsicCall(ii);
+        IL->LowerIntrinsicCall(ii);
         dirty = true;
         break;
       }
diff --git a/lib/Module/KModule.cpp b/lib/Module/KModule.cpp
index 032929e8..0f0d8fed 100644
--- a/lib/Module/KModule.cpp
+++ b/lib/Module/KModule.cpp
@@ -215,11 +215,8 @@ void KModule::prepare(const Interpreter::ModuleOptions &opts,
   pm.add(createScalarizerPass());
   if (opts.CheckDivZero) pm.add(new DivCheckPass());
   if (opts.CheckOvershift) pm.add(new OvershiftCheckPass());
-  // FIXME: This false here is to work around a bug in
-  // IntrinsicLowering which caches values which may eventually be
-  // deleted (via RAUW). This can be removed once LLVM fixes this
-  // issue.
-  pm.add(new IntrinsicCleanerPass(*targetData, false));
+
+  pm.add(new IntrinsicCleanerPass(*targetData));
   pm.run(*module);
 
   if (opts.Optimize)
diff --git a/lib/Module/Passes.h b/lib/Module/Passes.h
index 6ebcc98f..88c0ce8c 100644
--- a/lib/Module/Passes.h
+++ b/lib/Module/Passes.h
@@ -59,16 +59,12 @@ class IntrinsicCleanerPass : public llvm::ModulePass {
   static char ID;
   const llvm::DataLayout &DataLayout;
   llvm::IntrinsicLowering *IL;
-  bool LowerIntrinsics;
 
   bool runOnBasicBlock(llvm::BasicBlock &b, llvm::Module &M);
 public:
-  IntrinsicCleanerPass(const llvm::DataLayout &TD,
-                       bool LI=true)
-    : llvm::ModulePass(ID),
-      DataLayout(TD),
-      IL(new llvm::IntrinsicLowering(TD)),
-      LowerIntrinsics(LI) {}
+  IntrinsicCleanerPass(const llvm::DataLayout &TD, bool LI = true)
+      : llvm::ModulePass(ID), DataLayout(TD),
+        IL(new llvm::IntrinsicLowering(TD)) {}
   ~IntrinsicCleanerPass() { delete IL; } 
   
   virtual bool runOnModule(llvm::Module &M);