Index: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp =================================================================== --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -49,7 +49,11 @@ "Number of block queries that were completely cached"); // Limit for the number of instructions to scan in a block. -static const unsigned int BlockScanLimit = 100; + +static cl::opt BlockScanLimit( + "memdep-block-scan-limit", cl::Hidden, cl::init(100), + cl::desc("The number of instructions to scan in a block in memory " + "dependency analysis (default = 100)")); // Limit on the number of memdep results to process. static const unsigned int NumResultsLimit = 100; Index: llvm/trunk/test/Analysis/MemoryDependenceAnalysis/memdep-block-scan-limit.ll =================================================================== --- llvm/trunk/test/Analysis/MemoryDependenceAnalysis/memdep-block-scan-limit.ll +++ llvm/trunk/test/Analysis/MemoryDependenceAnalysis/memdep-block-scan-limit.ll @@ -0,0 +1,15 @@ +; RUN: opt -S -memdep -gvn -basicaa < %s | FileCheck %s +; RUN: opt -S -memdep -memdep-block-scan-limit=1 -gvn -basicaa < %s | FileCheck %s --check-prefix=WITH-LIMIT +; CHECK-LABEL: @test( +; CHECK: load +; CHECK-NOT: load +; WITH-LIMIT-LABEL: @test( +; WITH-LIMIT-CHECK: load +; WITH-LIMIT-CHECK: load +define i32 @test(i32* %p) { + %1 = load i32, i32* %p + %2 = add i32 %1, 3 + %3 = load i32, i32* %p + %4 = add i32 %2, %3 + ret i32 %4 +}