OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
LowerIntrinsics Class Reference
Inheritance diagram for LowerIntrinsics:
Inheritance graph
Collaboration diagram for LowerIntrinsics:
Collaboration graph

Public Member Functions

PreservedAnalyses run (Function &F, FunctionAnalysisManager &AM)
 
bool runOnBasicBlock (BasicBlock &BB)
 

Private Member Functions

bool doInitialization (Module &M)
 
bool doFinalization (Module &M)
 

Private Attributes

std::set< unsigned > replace_
 List of intrinsics to replace.
 
IntrinsicLowering * iLowering_
 
TargetDatatd_
 

Detailed Description

Definition at line 68 of file LowerIntrinsics.cc.

Member Function Documentation

◆ doFinalization()

bool LowerIntrinsics::doFinalization ( Module &  M)
private

Definition at line 120 of file LowerIntrinsics.cc.

120 {
121 if (iLowering_ != NULL) {
122 delete iLowering_;
123 iLowering_ = NULL;
124 }
125 if (td_ != NULL) {
126 delete td_;
127 td_ = NULL;
128 }
129 return true;
130}
IntrinsicLowering * iLowering_

References iLowering_, and td_.

Referenced by run().

◆ doInitialization()

bool LowerIntrinsics::doInitialization ( Module &  M)
private

Definition at line 101 of file LowerIntrinsics.cc.

101 {
102
103 // Initialize list of intrinsics to lower.
104 replace_.insert(Intrinsic::get_rounding);
105 replace_.insert(Intrinsic::ceil);
106 replace_.insert(Intrinsic::floor);
107 replace_.insert(Intrinsic::round);
108 replace_.insert(Intrinsic::exp2);
109 replace_.insert(Intrinsic::memcpy);
110 replace_.insert(Intrinsic::memset);
111 replace_.insert(Intrinsic::memmove);
112
113 assert(iLowering_ == NULL && td_ == NULL);
114 td_ = new TargetData(&M);
115 iLowering_ = new IntrinsicLowering(*td_);
116 return true;
117}
#define assert(condition)
POP_COMPILER_DIAGS typedef llvm::DataLayout TargetData
std::set< unsigned > replace_
List of intrinsics to replace.

References assert, iLowering_, replace_, TargetData, and td_.

Referenced by run().

◆ run()

PreservedAnalyses LowerIntrinsics::run ( Function &  F,
FunctionAnalysisManager &  AM 
)

Definition at line 87 of file LowerIntrinsics.cc.

88 {
89 //errs() << F.getName() << "\n";
90 Module *parentModule = F.getParent();
91 doInitialization(*parentModule);
92 for (BasicBlock &BB : F) {
94 }
95 doFinalization(*parentModule);
96 return PreservedAnalyses::all();
97}
bool doInitialization(Module &M)
bool doFinalization(Module &M)
bool runOnBasicBlock(BasicBlock &BB)

References doFinalization(), doInitialization(), and runOnBasicBlock().

Here is the call graph for this function:

◆ runOnBasicBlock()

bool LowerIntrinsics::runOnBasicBlock ( BasicBlock &  BB)

Definition at line 134 of file LowerIntrinsics.cc.

134 {
135 bool changed = true;
136 while (changed) {
137 changed = false;
138 for (BasicBlock::iterator I = BB.begin(), E = BB.end(); I != E; ++I) {
139 CallInst* ci = dyn_cast<CallInst>(&(*I));
140 if (ci != NULL && ci->arg_size() != 0) {
141 Function* callee = ci->getCalledFunction();
142 if (callee != NULL && callee->isIntrinsic() &&
143 replace_.find(callee->getIntrinsicID()) != replace_.end()) {
144 if (callee->getIntrinsicID() == Intrinsic::get_rounding) {
145 // Replace GET_ROUNDING intrinsic with the actual
146 // constant value to avoid stupid "if (1 == 0)"
147 // code even with full optimizations.
148 I->replaceAllUsesWith(
149 ConstantInt::get(
150 Type::getInt32Ty(BB.getContext()), 0, true));
151 I->eraseFromParent();
152 changed = true;
153 break;
154 } else {
155 iLowering_->LowerIntrinsicCall(ci);
156 changed = true;
157 break;
158 }
159 }
160 }
161 }
162 }
163 return true;
164}

References iLowering_, and replace_.

Referenced by run().

Member Data Documentation

◆ iLowering_

IntrinsicLowering* LowerIntrinsics::iLowering_
private

Definition at line 83 of file LowerIntrinsics.cc.

Referenced by doFinalization(), doInitialization(), and runOnBasicBlock().

◆ replace_

std::set<unsigned> LowerIntrinsics::replace_
private

List of intrinsics to replace.

Definition at line 82 of file LowerIntrinsics.cc.

Referenced by doInitialization(), and runOnBasicBlock().

◆ td_

TargetData* LowerIntrinsics::td_
private

Definition at line 84 of file LowerIntrinsics.cc.

Referenced by doFinalization(), and doInitialization().


The documentation for this class was generated from the following file: