forked from OSchip/llvm-project
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:
parent
3a2ae908fe
commit
741c94c719
|
@ -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
|
||||||
|
|
|
@ -140,6 +140,12 @@ namespace llvm {
|
||||||
//
|
//
|
||||||
FunctionPass *createLiveValuesPass();
|
FunctionPass *createLiveValuesPass();
|
||||||
|
|
||||||
|
//===--------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
/// createLazyValueInfoPass - This creates an instance of the LazyValueInfo
|
||||||
|
/// pass.
|
||||||
|
FunctionPass *createLazyValueInfoPass();
|
||||||
|
|
||||||
//===--------------------------------------------------------------------===//
|
//===--------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// createLoopDependenceAnalysisPass - This creates an instance of the
|
// createLoopDependenceAnalysisPass - This creates an instance of the
|
||||||
|
|
|
@ -82,6 +82,7 @@ namespace {
|
||||||
(void) llvm::createInternalizePass(false);
|
(void) llvm::createInternalizePass(false);
|
||||||
(void) llvm::createLCSSAPass();
|
(void) llvm::createLCSSAPass();
|
||||||
(void) llvm::createLICMPass();
|
(void) llvm::createLICMPass();
|
||||||
|
(void) llvm::createLazyValueInfoPass();
|
||||||
(void) llvm::createLiveValuesPass();
|
(void) llvm::createLiveValuesPass();
|
||||||
(void) llvm::createLoopDependenceAnalysisPass();
|
(void) llvm::createLoopDependenceAnalysisPass();
|
||||||
(void) llvm::createLoopExtractorPass();
|
(void) llvm::createLoopExtractorPass();
|
||||||
|
|
|
@ -18,6 +18,7 @@ add_llvm_library(LLVMAnalysis
|
||||||
InstructionSimplify.cpp
|
InstructionSimplify.cpp
|
||||||
Interval.cpp
|
Interval.cpp
|
||||||
IntervalPartition.cpp
|
IntervalPartition.cpp
|
||||||
|
LazyValueInfo.cpp
|
||||||
LibCallAliasAnalysis.cpp
|
LibCallAliasAnalysis.cpp
|
||||||
LibCallSemantics.cpp
|
LibCallSemantics.cpp
|
||||||
LiveValues.cpp
|
LiveValues.cpp
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue