@@ -71,9 +71,102 @@ void printVersion(raw_ostream &ostream) {
7171 cl::PrintVersionMessage ();
7272}
7373
74- int main (int argc, char **argv) {
75- cl::SetVersionPrinter (printVersion);
76- cl::HideUnrelatedOptions (category);
74+ void generateSymEncodingsFunction (std::string funcName) {
75+ auto M = getLLVMIR ();
76+ IR2Vec_Symbolic SYM (*M);
77+ std::ofstream o;
78+ o.open (oname, std::ios_base::app);
79+ if (printTime) {
80+ clock_t start = clock ();
81+ SYM .generateSymbolicEncodingsForFunction (&o, funcName);
82+ clock_t end = clock ();
83+ double elapsed = double (end - start) / CLOCKS_PER_SEC ;
84+ printf (" Time taken by on-demand generation of symbolic encodings "
85+ " is: %.6f "
86+ " seconds.\n " ,
87+ elapsed);
88+ } else {
89+ SYM .generateSymbolicEncodingsForFunction (&o, funcName);
90+ }
91+ o.close ();
92+ }
93+
94+ void generateFAEncodingsFunction (std::string funcName) {
95+ auto M = getLLVMIR ();
96+ IR2Vec_FA FA (*M);
97+ std::ofstream o, missCount, cyclicCount;
98+ o.open (oname, std::ios_base::app);
99+ missCount.open (" missCount_" + oname, std::ios_base::app);
100+ cyclicCount.open (" cyclicCount_" + oname, std::ios_base::app);
101+ if (printTime) {
102+ clock_t start = clock ();
103+ FA .generateFlowAwareEncodingsForFunction (&o, funcName, &missCount,
104+ &cyclicCount);
105+ clock_t end = clock ();
106+ double elapsed = double (end - start) / CLOCKS_PER_SEC ;
107+ printf (" Time taken by on-demand generation of flow-aware encodings "
108+ " is: %.6f "
109+ " seconds.\n " ,
110+ elapsed);
111+ } else {
112+ FA .generateFlowAwareEncodingsForFunction (&o, funcName, &missCount,
113+ &cyclicCount);
114+ }
115+ o.close ();
116+ }
117+
118+ void generateFAEncodings () {
119+ auto M = getLLVMIR ();
120+ IR2Vec_FA FA (*M);
121+ std::ofstream o, missCount, cyclicCount;
122+ o.open (oname, std::ios_base::app);
123+ missCount.open (" missCount_" + oname, std::ios_base::app);
124+ cyclicCount.open (" cyclicCount_" + oname, std::ios_base::app);
125+ if (printTime) {
126+ clock_t start = clock ();
127+ FA .generateFlowAwareEncodings (&o, &missCount, &cyclicCount);
128+ clock_t end = clock ();
129+ double elapsed = double (end - start) / CLOCKS_PER_SEC ;
130+ printf (" Time taken by normal generation of flow-aware encodings "
131+ " is: %.6f "
132+ " seconds.\n " ,
133+ elapsed);
134+ } else {
135+ FA .generateFlowAwareEncodings (&o, &missCount, &cyclicCount);
136+ }
137+ o.close ();
138+ }
139+
140+ void generateSYMEncodings () {
141+ auto M = getLLVMIR ();
142+ IR2Vec_Symbolic SYM (*M);
143+ std::ofstream o;
144+ o.open (oname, std::ios_base::app);
145+ if (printTime) {
146+ clock_t start = clock ();
147+ SYM .generateSymbolicEncodings (&o);
148+ clock_t end = clock ();
149+ double elapsed = double (end - start) / CLOCKS_PER_SEC ;
150+ printf (" Time taken by normal generation of symbolic encodings is: "
151+ " %.6f "
152+ " seconds.\n " ,
153+ elapsed);
154+ } else {
155+ SYM .generateSymbolicEncodings (&o);
156+ }
157+ o.close ();
158+ }
159+
160+ void collectIR () {
161+ auto M = getLLVMIR ();
162+ CollectIR cir (M);
163+ std::ofstream o;
164+ o.open (oname, std::ios_base::app);
165+ cir.generateTriplets (o);
166+ o.close ();
167+ }
168+
169+ void setGlobalVars (int argc, char **argv) {
77170 cl::ParseCommandLineOptions (argc, argv);
78171
79172 fa = cl_fa;
@@ -90,111 +183,56 @@ int main(int argc, char **argv) {
90183 WT = cl_WT;
91184 debug = cl_debug;
92185 printTime = cl_printTime;
186+ }
93187
188+ void checkFailureConditions () {
94189 bool failed = false ;
95- if (!((sym ^ fa) ^ collectIR)) {
96- errs () << " Either of sym, fa or collectIR should be specified\n " ;
190+
191+ if (!(sym || fa || collectIR)) {
192+ errs () << " Either of sym, fa, or collectIR should be specified\n " ;
97193 failed = true ;
98194 }
99195
196+ if (failed)
197+ exit (1 );
198+
100199 if (sym || fa) {
101200 if (level != ' p' && level != ' f' ) {
102201 errs () << " Invalid level specified: Use either p or f\n " ;
103202 failed = true ;
104203 }
105204 } else {
106- if (! collectIR) {
107- errs () << " Either of sym, fa or collectIR should be specified \n " ;
108- failed = true ;
109- } else if (level)
205+ // assert collectIR is True. Else
206+ assert ( collectIR == true ) ;
207+
208+ if (collectIR && level) {
110209 errs () << " [WARNING] level would not be used in collectIR mode\n " ;
210+ }
111211 }
112212
113213 if (failed)
114214 exit (1 );
215+ }
216+
217+ int main (int argc, char **argv) {
218+ cl::SetVersionPrinter (printVersion);
219+ cl::HideUnrelatedOptions (category);
220+
221+ setGlobalVars (argc, argv);
222+
223+ checkFailureConditions ();
115224
116- auto M = getLLVMIR ();
117225 // newly added
118226 if (sym && !(funcName.empty ())) {
119- IR2Vec_Symbolic SYM (*M);
120- std::ofstream o;
121- o.open (oname, std::ios_base::app);
122- if (printTime) {
123- clock_t start = clock ();
124- SYM .generateSymbolicEncodingsForFunction (&o, funcName);
125- clock_t end = clock ();
126- double elapsed = double (end - start) / CLOCKS_PER_SEC ;
127- printf (" Time taken by on-demand generation of symbolic encodings "
128- " is: %.6f "
129- " seconds.\n " ,
130- elapsed);
131- } else {
132- SYM .generateSymbolicEncodingsForFunction (&o, funcName);
133- }
134- o.close ();
227+ generateSymEncodingsFunction (funcName);
135228 } else if (fa && !(funcName.empty ())) {
136- IR2Vec_FA FA (*M);
137- std::ofstream o, missCount, cyclicCount;
138- o.open (oname, std::ios_base::app);
139- missCount.open (" missCount_" + oname, std::ios_base::app);
140- cyclicCount.open (" cyclicCount_" + oname, std::ios_base::app);
141- if (printTime) {
142- clock_t start = clock ();
143- FA .generateFlowAwareEncodingsForFunction (&o, funcName, &missCount,
144- &cyclicCount);
145- clock_t end = clock ();
146- double elapsed = double (end - start) / CLOCKS_PER_SEC ;
147- printf (" Time taken by on-demand generation of flow-aware encodings "
148- " is: %.6f "
149- " seconds.\n " ,
150- elapsed);
151- } else {
152- FA .generateFlowAwareEncodingsForFunction (&o, funcName, &missCount,
153- &cyclicCount);
154- }
155- o.close ();
229+ generateFAEncodingsFunction (funcName);
156230 } else if (fa) {
157- IR2Vec_FA FA (*M);
158- std::ofstream o, missCount, cyclicCount;
159- o.open (oname, std::ios_base::app);
160- missCount.open (" missCount_" + oname, std::ios_base::app);
161- cyclicCount.open (" cyclicCount_" + oname, std::ios_base::app);
162- if (printTime) {
163- clock_t start = clock ();
164- FA .generateFlowAwareEncodings (&o, &missCount, &cyclicCount);
165- clock_t end = clock ();
166- double elapsed = double (end - start) / CLOCKS_PER_SEC ;
167- printf (" Time taken by normal generation of flow-aware encodings "
168- " is: %.6f "
169- " seconds.\n " ,
170- elapsed);
171- } else {
172- FA .generateFlowAwareEncodings (&o, &missCount, &cyclicCount);
173- }
174- o.close ();
231+ generateFAEncodings ();
175232 } else if (sym) {
176- IR2Vec_Symbolic SYM (*M);
177- std::ofstream o;
178- o.open (oname, std::ios_base::app);
179- if (printTime) {
180- clock_t start = clock ();
181- SYM .generateSymbolicEncodings (&o);
182- clock_t end = clock ();
183- double elapsed = double (end - start) / CLOCKS_PER_SEC ;
184- printf (" Time taken by normal generation of symbolic encodings is: "
185- " %.6f "
186- " seconds.\n " ,
187- elapsed);
188- } else {
189- SYM .generateSymbolicEncodings (&o);
190- }
191- o.close ();
233+ generateSYMEncodings ();
192234 } else if (collectIR) {
193- CollectIR cir (M);
194- std::ofstream o;
195- o.open (oname, std::ios_base::app);
196- cir.generateTriplets (o);
197- o.close ();
235+ collectIR ();
198236 }
199237 return 0 ;
200238}
0 commit comments