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();
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
//
|
||||
/// createLazyValueInfoPass - This creates an instance of the LazyValueInfo
|
||||
/// pass.
|
||||
FunctionPass *createLazyValueInfoPass();
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
//
|
||||
// createLoopDependenceAnalysisPass - This creates an instance of the
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -18,6 +18,7 @@ add_llvm_library(LLVMAnalysis
|
|||
InstructionSimplify.cpp
|
||||
Interval.cpp
|
||||
IntervalPartition.cpp
|
||||
LazyValueInfo.cpp
|
||||
LibCallAliasAnalysis.cpp
|
||||
LibCallSemantics.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