From 707c92aa3de237c8777a1f9732a68eb1149beb0b Mon Sep 17 00:00:00 2001 From: radl97 Date: Mon, 14 Sep 2020 20:56:30 +0200 Subject: [PATCH 1/2] Disabling SROA: store becomes lot of extractvalues --- src/LLVM/LLVMFrontend.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/LLVM/LLVMFrontend.cpp b/src/LLVM/LLVMFrontend.cpp index dcad8f1e..a3fb3298 100644 --- a/src/LLVM/LLVMFrontend.cpp +++ b/src/LLVM/LLVMFrontend.cpp @@ -336,10 +336,10 @@ void LLVMFrontend::registerEarlyOptimizations() mPassManager.add(llvm::createInstructionCombiningPass()); mPassManager.add(llvm::createCFGSimplificationPass()); - // SROA may introduce new undef values, so we run another promote undef pass after it - mPassManager.add(llvm::createSROAPass()); - mPassManager.add(gazer::createPromoteUndefsPass()); - //mPassManager.add(llvm::createEarlyCSEPass()); + // // SROA may introduce new undef values, so we run another promote undef pass after it + // mPassManager.add(llvm::createSROAPass()); + // mPassManager.add(gazer::createPromoteUndefsPass()); + // //mPassManager.add(llvm::createEarlyCSEPass()); mPassManager.add(llvm::createCFGSimplificationPass()); mPassManager.add(llvm::createAggressiveInstCombinerPass()); From e2a6fca3b682ef9cc35c809a1a1ce0af8edfd79f Mon Sep 17 00:00:00 2001 From: radl97 Date: Tue, 15 Sep 2020 15:03:50 +0200 Subject: [PATCH 2/2] SROA back on, disable instCombiner The problem is with InstCombiner::unpackStoreToAggregate() that uses extractValueInst --- src/LLVM/LLVMFrontend.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/LLVM/LLVMFrontend.cpp b/src/LLVM/LLVMFrontend.cpp index a3fb3298..7183c179 100644 --- a/src/LLVM/LLVMFrontend.cpp +++ b/src/LLVM/LLVMFrontend.cpp @@ -333,17 +333,17 @@ void LLVMFrontend::registerEarlyOptimizations() mPassManager.add(llvm::createDeadArgEliminationPass()); // Clean up - mPassManager.add(llvm::createInstructionCombiningPass()); + //mPassManager.add(llvm::createInstructionCombiningPass()); mPassManager.add(llvm::createCFGSimplificationPass()); - // // SROA may introduce new undef values, so we run another promote undef pass after it - // mPassManager.add(llvm::createSROAPass()); - // mPassManager.add(gazer::createPromoteUndefsPass()); - // //mPassManager.add(llvm::createEarlyCSEPass()); + // SROA may introduce new undef values, so we run another promote undef pass after it + mPassManager.add(llvm::createSROAPass()); + mPassManager.add(gazer::createPromoteUndefsPass()); + //mPassManager.add(llvm::createEarlyCSEPass()); mPassManager.add(llvm::createCFGSimplificationPass()); - mPassManager.add(llvm::createAggressiveInstCombinerPass()); - mPassManager.add(llvm::createInstructionCombiningPass()); + //mPassManager.add(llvm::createAggressiveInstCombinerPass()); + //mPassManager.add(llvm::createInstructionCombiningPass()); // Try to remove irreducible control flow if (StructurizeCFG) {