xref: /llvm-project/bolt/test/runtime/X86/Inputs/retpoline_synthetic.cpp (revision 4c106cfdf7cf7eec861ad3983a3dd9a9e8f3a8ae)
1*f44e1df9SAmir Ayupov #include <stdio.h>
2*f44e1df9SAmir Ayupov #include <stdlib.h>
3*f44e1df9SAmir Ayupov #include <vector>
4*f44e1df9SAmir Ayupov 
5*f44e1df9SAmir Ayupov using namespace std;
6*f44e1df9SAmir Ayupov 
7*f44e1df9SAmir Ayupov class Base {
8*f44e1df9SAmir Ayupov public:
9*f44e1df9SAmir Ayupov   virtual int Foo() = 0;
10*f44e1df9SAmir Ayupov };
11*f44e1df9SAmir Ayupov 
12*f44e1df9SAmir Ayupov class Derived1 : public Base {
13*f44e1df9SAmir Ayupov public:
Foo()14*f44e1df9SAmir Ayupov   int Foo() override { return 1; }
15*f44e1df9SAmir Ayupov };
16*f44e1df9SAmir Ayupov 
17*f44e1df9SAmir Ayupov class Derived2 : public Base {
18*f44e1df9SAmir Ayupov public:
Foo()19*f44e1df9SAmir Ayupov   int Foo() override { return 2; }
20*f44e1df9SAmir Ayupov };
21*f44e1df9SAmir Ayupov 
22*f44e1df9SAmir Ayupov class Derived3 : public Base {
23*f44e1df9SAmir Ayupov public:
Foo()24*f44e1df9SAmir Ayupov   int Foo() override { return 3; }
25*f44e1df9SAmir Ayupov };
26*f44e1df9SAmir Ayupov 
main(int argc,char * argv[])27*f44e1df9SAmir Ayupov int main(int argc, char *argv[]) {
28*f44e1df9SAmir Ayupov   long long sum = 0;
29*f44e1df9SAmir Ayupov   int outerIters = atoi(argv[1]);
30*f44e1df9SAmir Ayupov   int selector = atoi(argv[2]);
31*f44e1df9SAmir Ayupov 
32*f44e1df9SAmir Ayupov   Base *obj1 = new Derived1();
33*f44e1df9SAmir Ayupov   Base *obj2 = new Derived2();
34*f44e1df9SAmir Ayupov   Base *obj3 = new Derived3();
35*f44e1df9SAmir Ayupov 
36*f44e1df9SAmir Ayupov   for (int j = 0; j < outerIters; j++) {
37*f44e1df9SAmir Ayupov     for (int i = 0; i < 10000; i++) {
38*f44e1df9SAmir Ayupov       switch (selector) {
39*f44e1df9SAmir Ayupov       case 1: sum += obj1->Foo();  break;
40*f44e1df9SAmir Ayupov       case 2: sum += obj2->Foo();  break;
41*f44e1df9SAmir Ayupov       case 3: sum += obj3->Foo();  break;
42*f44e1df9SAmir Ayupov       }
43*f44e1df9SAmir Ayupov     }
44*f44e1df9SAmir Ayupov   }
45*f44e1df9SAmir Ayupov   printf("%lld\n", sum);
46*f44e1df9SAmir Ayupov }
47