annotate gcc/testsuite/g++.target/i386/mv17.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // Test case to check if Multiversioning works for BMI and BMI2.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 // { dg-do run }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 // { dg-require-ifunc "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 // { dg-options "-O2" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 #include <assert.h>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 // Check BMI feature selection works
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 int foo () __attribute__((target("default")));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 int foo () __attribute__((target("bmi")));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 int foo () __attribute__((target("bmi2")));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 // Check specialized versions for archs with BMI is chosen over generic BMI versions.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 int bar () __attribute__((target("default")));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 int bar () __attribute__((target("bmi")));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 int bar () __attribute__((target("bmi2")));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 int bar () __attribute__((target("arch=btver2")));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 int bar () __attribute__((target("arch=haswell")));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 int main ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 int val = foo ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 if (__builtin_cpu_supports ("bmi2"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 assert (val == 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 else if (__builtin_cpu_supports ("bmi"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 assert (val == 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 assert (val == 0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 val = bar ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 if (__builtin_cpu_is ("btver2"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 assert (val == 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 else if (__builtin_cpu_is ("haswell"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 assert (val == 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 else if (__builtin_cpu_supports ("bmi2"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 assert (val == 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 else if (__builtin_cpu_supports ("bmi"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 assert (val == 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 assert (val == 0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 int __attribute__ ((target("default")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 foo ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 int __attribute__ ((target("bmi")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 foo ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 return 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 int __attribute__ ((target("bmi2")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 foo ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 return 2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 int __attribute__ ((target("default")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 bar ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 int __attribute__ ((target("bmi")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 bar ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 return 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 int __attribute__ ((target("bmi2")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 bar ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 return 2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 int __attribute__ ((target("arch=btver2")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 bar ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 return 5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 int __attribute__ ((target("arch=haswell")))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 bar ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 return 6;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93