Stub out a new lazy value info pass, which will eventually

vend value constraint information to the optimizer.

llvm-svn: 86767
This commit is contained in:
Chris Lattner 2009-11-11 00:22:30 +00:00
parent 3a2ae908fe
commit 741c94c719
6 changed files with 108 additions and 0 deletions

View File

@ -0,0 +1,43 @@
//===- LazyValueInfo.h - Value constraint analysis --------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the interface for lazy computation of value constraint
// information.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_ANALYSIS_LIVEVALUES_H
#define LLVM_ANALYSIS_LIVEVALUES_H
#include "llvm/Pass.h"
namespace llvm {
/// LazyValueInfo - This pass computes, caches, and vends lazy value constraint
/// information.
class LazyValueInfo : public FunctionPass {
public:
static char ID;
LazyValueInfo();
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
virtual void releaseMemory();
virtual bool runOnFunction(Function &F) {
// Fully lazy.
return false;
}
};
} // end namespace llvm
#endif

View File

@ -139,6 +139,12 @@ namespace llvm {
// createLiveValuesPass - This creates an instance of the LiveValues pass.
//
FunctionPass *createLiveValuesPass();
//===--------------------------------------------------------------------===//
//
/// createLazyValueInfoPass - This creates an instance of the LazyValueInfo
/// pass.
FunctionPass *createLazyValueInfoPass();
//===--------------------------------------------------------------------===//
//

View File

@ -82,6 +82,7 @@ namespace {
(void) llvm::createInternalizePass(false);
(void) llvm::createLCSSAPass();
(void) llvm::createLICMPass();
(void) llvm::createLazyValueInfoPass();
(void) llvm::createLiveValuesPass();
(void) llvm::createLoopDependenceAnalysisPass();
(void) llvm::createLoopExtractorPass();

View File

@ -18,6 +18,7 @@ add_llvm_library(LLVMAnalysis
InstructionSimplify.cpp
Interval.cpp
IntervalPartition.cpp
LazyValueInfo.cpp
LibCallAliasAnalysis.cpp
LibCallSemantics.cpp
LiveValues.cpp

View File

@ -0,0 +1,31 @@
//===- LazyValueInfo.cpp - Value constraint analysis ----------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the interface for lazy computation of value constraint
// information.
//
//===----------------------------------------------------------------------===//
#include "llvm/Analysis/LazyValueInfo.h"
using namespace llvm;
char LazyValueInfo::ID = 0;
static RegisterPass<LazyValueInfo>
X("lazy-value-info", "Lazy Value Information Analysis", false, true);
namespace llvm {
FunctionPass *createLazyValueInfoPass() { return new LazyValueInfo(); }
}
LazyValueInfo::LazyValueInfo() : FunctionPass(&ID) {
}
void LazyValueInfo::releaseMemory() {
}

View File

@ -284,3 +284,29 @@ F2:
}
;;; Duplicate condition to avoid xor of cond.
define i32 @test10(i1 %cond, i1 %cond2) {
Entry:
; CHECK: @test10
%v1 = call i32 @f1()
br i1 %cond, label %Merge, label %F1
F1:
br label %Merge
Merge:
%B = phi i1 [true, %Entry], [%cond2, %F1]
%M = icmp eq i32 %v1, 192
%N = xor i1 %B, %M
br i1 %N, label %T2, label %F2
T2:
ret i32 123
F2:
ret i32 %v1
}