1616
1717#include " llvm/ADT/STLExtras.h"
1818#include " llvm/Analysis/TargetLibraryInfo.h"
19- #include " llvm/IR/IRBuilder.h"
2019
2120namespace llvm {
2221class StringRef ;
2322class Value ;
2423class CallInst ;
2524class DataLayout ;
2625class Instruction ;
26+ class IRBuilderBase ;
2727class TargetLibraryInfo ;
2828class BasicBlock ;
2929class Function ;
@@ -53,23 +53,23 @@ class FortifiedLibCallSimplifier {
5353 Value *optimizeCall (CallInst *CI);
5454
5555private:
56- Value *optimizeMemCpyChk (CallInst *CI, IRBuilder<> &B);
57- Value *optimizeMemMoveChk (CallInst *CI, IRBuilder<> &B);
58- Value *optimizeMemSetChk (CallInst *CI, IRBuilder<> &B);
56+ Value *optimizeMemCpyChk (CallInst *CI, IRBuilderBase &B);
57+ Value *optimizeMemMoveChk (CallInst *CI, IRBuilderBase &B);
58+ Value *optimizeMemSetChk (CallInst *CI, IRBuilderBase &B);
5959
6060 // / Str/Stp cpy are similar enough to be handled in the same functions.
61- Value *optimizeStrpCpyChk (CallInst *CI, IRBuilder<> &B, LibFunc Func);
62- Value *optimizeStrpNCpyChk (CallInst *CI, IRBuilder<> &B, LibFunc Func);
63- Value *optimizeStrLenChk (CallInst *CI, IRBuilder<> &B);
64- Value *optimizeMemCCpyChk (CallInst *CI, IRBuilder<> &B);
65- Value *optimizeSNPrintfChk (CallInst *CI, IRBuilder<> &B);
66- Value *optimizeSPrintfChk (CallInst *CI,IRBuilder<> &B);
67- Value *optimizeStrCatChk (CallInst *CI, IRBuilder<> &B);
68- Value *optimizeStrLCat (CallInst *CI, IRBuilder<> &B);
69- Value *optimizeStrNCatChk (CallInst *CI, IRBuilder<> &B);
70- Value *optimizeStrLCpyChk (CallInst *CI, IRBuilder<> &B);
71- Value *optimizeVSNPrintfChk (CallInst *CI, IRBuilder<> &B);
72- Value *optimizeVSPrintfChk (CallInst *CI, IRBuilder<> &B);
61+ Value *optimizeStrpCpyChk (CallInst *CI, IRBuilderBase &B, LibFunc Func);
62+ Value *optimizeStrpNCpyChk (CallInst *CI, IRBuilderBase &B, LibFunc Func);
63+ Value *optimizeStrLenChk (CallInst *CI, IRBuilderBase &B);
64+ Value *optimizeMemCCpyChk (CallInst *CI, IRBuilderBase &B);
65+ Value *optimizeSNPrintfChk (CallInst *CI, IRBuilderBase &B);
66+ Value *optimizeSPrintfChk (CallInst *CI,IRBuilderBase &B);
67+ Value *optimizeStrCatChk (CallInst *CI, IRBuilderBase &B);
68+ Value *optimizeStrLCat (CallInst *CI, IRBuilderBase &B);
69+ Value *optimizeStrNCatChk (CallInst *CI, IRBuilderBase &B);
70+ Value *optimizeStrLCpyChk (CallInst *CI, IRBuilderBase &B);
71+ Value *optimizeVSNPrintfChk (CallInst *CI, IRBuilderBase &B);
72+ Value *optimizeVSPrintfChk (CallInst *CI, IRBuilderBase &B);
7373
7474 // / Checks whether the call \p CI to a fortified libcall is foldable
7575 // / to the non-fortified version.
@@ -133,7 +133,7 @@ class LibCallSimplifier {
133133 eraseFromParent (I);
134134 }
135135
136- Value *foldMallocMemset (CallInst *Memset, IRBuilder<> &B);
136+ Value *foldMallocMemset (CallInst *Memset, IRBuilderBase &B);
137137
138138public:
139139 LibCallSimplifier (
@@ -155,95 +155,96 @@ class LibCallSimplifier {
155155
156156private:
157157 // String and Memory Library Call Optimizations
158- Value *optimizeStrCat (CallInst *CI, IRBuilder<> &B);
159- Value *optimizeStrNCat (CallInst *CI, IRBuilder<> &B);
160- Value *optimizeStrChr (CallInst *CI, IRBuilder<> &B);
161- Value *optimizeStrRChr (CallInst *CI, IRBuilder<> &B);
162- Value *optimizeStrCmp (CallInst *CI, IRBuilder<> &B);
163- Value *optimizeStrNCmp (CallInst *CI, IRBuilder<> &B);
164- Value *optimizeStrNDup (CallInst *CI, IRBuilder<> &B);
165- Value *optimizeStrCpy (CallInst *CI, IRBuilder<> &B);
166- Value *optimizeStpCpy (CallInst *CI, IRBuilder<> &B);
167- Value *optimizeStrNCpy (CallInst *CI, IRBuilder<> &B);
168- Value *optimizeStrLen (CallInst *CI, IRBuilder<> &B);
169- Value *optimizeStrPBrk (CallInst *CI, IRBuilder<> &B);
170- Value *optimizeStrTo (CallInst *CI, IRBuilder<> &B);
171- Value *optimizeStrSpn (CallInst *CI, IRBuilder<> &B);
172- Value *optimizeStrCSpn (CallInst *CI, IRBuilder<> &B);
173- Value *optimizeStrStr (CallInst *CI, IRBuilder<> &B);
174- Value *optimizeMemChr (CallInst *CI, IRBuilder<> &B);
175- Value *optimizeMemRChr (CallInst *CI, IRBuilder<> &B);
176- Value *optimizeMemCmp (CallInst *CI, IRBuilder<> &B);
177- Value *optimizeBCmp (CallInst *CI, IRBuilder<> &B);
178- Value *optimizeMemCmpBCmpCommon (CallInst *CI, IRBuilder<> &B);
179- Value *optimizeMemCCpy (CallInst *CI, IRBuilder<> &B);
180- Value *optimizeMemPCpy (CallInst *CI, IRBuilder<> &B);
181- Value *optimizeMemCpy (CallInst *CI, IRBuilder<> &B);
182- Value *optimizeMemMove (CallInst *CI, IRBuilder<> &B);
183- Value *optimizeMemSet (CallInst *CI, IRBuilder<> &B);
184- Value *optimizeRealloc (CallInst *CI, IRBuilder<> &B);
185- Value *optimizeWcslen (CallInst *CI, IRBuilder<> &B);
186- Value *optimizeBCopy (CallInst *CI, IRBuilder<> &B);
158+ Value *optimizeStrCat (CallInst *CI, IRBuilderBase &B);
159+ Value *optimizeStrNCat (CallInst *CI, IRBuilderBase &B);
160+ Value *optimizeStrChr (CallInst *CI, IRBuilderBase &B);
161+ Value *optimizeStrRChr (CallInst *CI, IRBuilderBase &B);
162+ Value *optimizeStrCmp (CallInst *CI, IRBuilderBase &B);
163+ Value *optimizeStrNCmp (CallInst *CI, IRBuilderBase &B);
164+ Value *optimizeStrNDup (CallInst *CI, IRBuilderBase &B);
165+ Value *optimizeStrCpy (CallInst *CI, IRBuilderBase &B);
166+ Value *optimizeStpCpy (CallInst *CI, IRBuilderBase &B);
167+ Value *optimizeStrNCpy (CallInst *CI, IRBuilderBase &B);
168+ Value *optimizeStrLen (CallInst *CI, IRBuilderBase &B);
169+ Value *optimizeStrPBrk (CallInst *CI, IRBuilderBase &B);
170+ Value *optimizeStrTo (CallInst *CI, IRBuilderBase &B);
171+ Value *optimizeStrSpn (CallInst *CI, IRBuilderBase &B);
172+ Value *optimizeStrCSpn (CallInst *CI, IRBuilderBase &B);
173+ Value *optimizeStrStr (CallInst *CI, IRBuilderBase &B);
174+ Value *optimizeMemChr (CallInst *CI, IRBuilderBase &B);
175+ Value *optimizeMemRChr (CallInst *CI, IRBuilderBase &B);
176+ Value *optimizeMemCmp (CallInst *CI, IRBuilderBase &B);
177+ Value *optimizeBCmp (CallInst *CI, IRBuilderBase &B);
178+ Value *optimizeMemCmpBCmpCommon (CallInst *CI, IRBuilderBase &B);
179+ Value *optimizeMemCCpy (CallInst *CI, IRBuilderBase &B);
180+ Value *optimizeMemPCpy (CallInst *CI, IRBuilderBase &B);
181+ Value *optimizeMemCpy (CallInst *CI, IRBuilderBase &B);
182+ Value *optimizeMemMove (CallInst *CI, IRBuilderBase &B);
183+ Value *optimizeMemSet (CallInst *CI, IRBuilderBase &B);
184+ Value *optimizeRealloc (CallInst *CI, IRBuilderBase &B);
185+ Value *optimizeWcslen (CallInst *CI, IRBuilderBase &B);
186+ Value *optimizeBCopy (CallInst *CI, IRBuilderBase &B);
187187 // Wrapper for all String/Memory Library Call Optimizations
188- Value *optimizeStringMemoryLibCall (CallInst *CI, IRBuilder<> &B);
188+ Value *optimizeStringMemoryLibCall (CallInst *CI, IRBuilderBase &B);
189189
190190 // Math Library Optimizations
191- Value *optimizeCAbs (CallInst *CI, IRBuilder<> &B);
192- Value *optimizePow (CallInst *CI, IRBuilder<> &B);
193- Value *replacePowWithExp (CallInst *Pow, IRBuilder<> &B);
194- Value *replacePowWithSqrt (CallInst *Pow, IRBuilder<> &B);
195- Value *optimizeExp2 (CallInst *CI, IRBuilder<> &B);
196- Value *optimizeFMinFMax (CallInst *CI, IRBuilder<> &B);
197- Value *optimizeLog (CallInst *CI, IRBuilder<> &B);
198- Value *optimizeSqrt (CallInst *CI, IRBuilder<> &B);
199- Value *optimizeSinCosPi (CallInst *CI, IRBuilder<> &B);
200- Value *optimizeTan (CallInst *CI, IRBuilder<> &B);
191+ Value *optimizeCAbs (CallInst *CI, IRBuilderBase &B);
192+ Value *optimizePow (CallInst *CI, IRBuilderBase &B);
193+ Value *replacePowWithExp (CallInst *Pow, IRBuilderBase &B);
194+ Value *replacePowWithSqrt (CallInst *Pow, IRBuilderBase &B);
195+ Value *optimizeExp2 (CallInst *CI, IRBuilderBase &B);
196+ Value *optimizeFMinFMax (CallInst *CI, IRBuilderBase &B);
197+ Value *optimizeLog (CallInst *CI, IRBuilderBase &B);
198+ Value *optimizeSqrt (CallInst *CI, IRBuilderBase &B);
199+ Value *optimizeSinCosPi (CallInst *CI, IRBuilderBase &B);
200+ Value *optimizeTan (CallInst *CI, IRBuilderBase &B);
201201 // Wrapper for all floating point library call optimizations
202202 Value *optimizeFloatingPointLibCall (CallInst *CI, LibFunc Func,
203- IRBuilder<> &B);
203+ IRBuilderBase &B);
204204
205205 // Integer Library Call Optimizations
206- Value *optimizeFFS (CallInst *CI, IRBuilder<> &B);
207- Value *optimizeFls (CallInst *CI, IRBuilder<> &B);
208- Value *optimizeAbs (CallInst *CI, IRBuilder<> &B);
209- Value *optimizeIsDigit (CallInst *CI, IRBuilder<> &B);
210- Value *optimizeIsAscii (CallInst *CI, IRBuilder<> &B);
211- Value *optimizeToAscii (CallInst *CI, IRBuilder<> &B);
212- Value *optimizeAtoi (CallInst *CI, IRBuilder<> &B);
213- Value *optimizeStrtol (CallInst *CI, IRBuilder<> &B);
206+ Value *optimizeFFS (CallInst *CI, IRBuilderBase &B);
207+ Value *optimizeFls (CallInst *CI, IRBuilderBase &B);
208+ Value *optimizeAbs (CallInst *CI, IRBuilderBase &B);
209+ Value *optimizeIsDigit (CallInst *CI, IRBuilderBase &B);
210+ Value *optimizeIsAscii (CallInst *CI, IRBuilderBase &B);
211+ Value *optimizeToAscii (CallInst *CI, IRBuilderBase &B);
212+ Value *optimizeAtoi (CallInst *CI, IRBuilderBase &B);
213+ Value *optimizeStrtol (CallInst *CI, IRBuilderBase &B);
214214
215215 // Formatting and IO Library Call Optimizations
216- Value *optimizeErrorReporting (CallInst *CI, IRBuilder<> &B,
216+ Value *optimizeErrorReporting (CallInst *CI, IRBuilderBase &B,
217217 int StreamArg = -1 );
218- Value *optimizePrintF (CallInst *CI, IRBuilder<> &B);
219- Value *optimizeSPrintF (CallInst *CI, IRBuilder<> &B);
220- Value *optimizeSnPrintF (CallInst *CI, IRBuilder<> &B);
221- Value *optimizeFPrintF (CallInst *CI, IRBuilder<> &B);
222- Value *optimizeFWrite (CallInst *CI, IRBuilder<> &B);
223- Value *optimizeFRead (CallInst *CI, IRBuilder<> &B);
224- Value *optimizeFPuts (CallInst *CI, IRBuilder<> &B);
225- Value *optimizeFGets (CallInst *CI, IRBuilder<> &B);
226- Value *optimizeFPutc (CallInst *CI, IRBuilder<> &B);
227- Value *optimizeFGetc (CallInst *CI, IRBuilder<> &B);
228- Value *optimizePuts (CallInst *CI, IRBuilder<> &B);
218+ Value *optimizePrintF (CallInst *CI, IRBuilderBase &B);
219+ Value *optimizeSPrintF (CallInst *CI, IRBuilderBase &B);
220+ Value *optimizeSnPrintF (CallInst *CI, IRBuilderBase &B);
221+ Value *optimizeFPrintF (CallInst *CI, IRBuilderBase &B);
222+ Value *optimizeFWrite (CallInst *CI, IRBuilderBase &B);
223+ Value *optimizeFRead (CallInst *CI, IRBuilderBase &B);
224+ Value *optimizeFPuts (CallInst *CI, IRBuilderBase &B);
225+ Value *optimizeFGets (CallInst *CI, IRBuilderBase &B);
226+ Value *optimizeFPutc (CallInst *CI, IRBuilderBase &B);
227+ Value *optimizeFGetc (CallInst *CI, IRBuilderBase &B);
228+ Value *optimizePuts (CallInst *CI, IRBuilderBase &B);
229229
230230 // Helper methods
231- Value *emitStrLenMemCpy (Value *Src, Value *Dst, uint64_t Len, IRBuilder<> &B);
231+ Value *emitStrLenMemCpy (Value *Src, Value *Dst, uint64_t Len,
232+ IRBuilderBase &B);
232233 void classifyArgUse (Value *Val, Function *F, bool IsFloat,
233234 SmallVectorImpl<CallInst *> &SinCalls,
234235 SmallVectorImpl<CallInst *> &CosCalls,
235236 SmallVectorImpl<CallInst *> &SinCosCalls);
236- Value *optimizePrintFString (CallInst *CI, IRBuilder<> &B);
237- Value *optimizeSPrintFString (CallInst *CI, IRBuilder<> &B);
238- Value *optimizeSnPrintFString (CallInst *CI, IRBuilder<> &B);
239- Value *optimizeFPrintFString (CallInst *CI, IRBuilder<> &B);
237+ Value *optimizePrintFString (CallInst *CI, IRBuilderBase &B);
238+ Value *optimizeSPrintFString (CallInst *CI, IRBuilderBase &B);
239+ Value *optimizeSnPrintFString (CallInst *CI, IRBuilderBase &B);
240+ Value *optimizeFPrintFString (CallInst *CI, IRBuilderBase &B);
240241
241242 // / hasFloatVersion - Checks if there is a float version of the specified
242243 // / function by checking for an existing function with name FuncName + f
243244 bool hasFloatVersion (StringRef FuncName);
244245
245246 // / Shared code to optimize strlen+wcslen.
246- Value *optimizeStringLength (CallInst *CI, IRBuilder<> &B, unsigned CharSize);
247+ Value *optimizeStringLength (CallInst *CI, IRBuilderBase &B, unsigned CharSize);
247248};
248249} // End llvm namespace
249250
0 commit comments