blob: 7557ec7acdd507609eafd4f94b52aa32fb0574e3 [file] [log] [blame]
Eric Christopher11acf732015-06-12 01:35:52 +00001// RUN: %clang_cc1 -triple x86_64-linux-gnu -target-cpu x86-64 -emit-llvm %s -o - | FileCheck %s
2
3int baz(int a) { return 4; }
4
5int __attribute__((target("avx,sse4.2,arch=ivybridge"))) foo(int a) { return 4; }
6
Eric Christopher64a247b2015-06-12 01:35:56 +00007int __attribute__((target("tune=sandybridge"))) walrus(int a) { return 4; }
Eric Christopher249e3762015-06-12 01:36:00 +00008int __attribute__((target("fpmath=387"))) koala(int a) { return 4; }
Eric Christopher64a247b2015-06-12 01:35:56 +00009
Eric Christopher3751bce2015-08-27 20:05:48 +000010int __attribute__((target("no-sse2"))) echidna(int a) { return 4; }
Eric Christopher4dfe0752015-06-12 01:35:58 +000011
Eric Christopher298ac302015-07-01 00:08:32 +000012int __attribute__((target("sse4"))) panda(int a) { return 4; }
13
Eric Christopher11acf732015-06-12 01:35:52 +000014int bar(int a) { return baz(a) + foo(a); }
15
Eric Christopheraf4d6082015-07-06 23:51:59 +000016int __attribute__((target("avx, sse4.2, arch= ivybridge"))) qux(int a) { return 4; }
Eric Christopher3751bce2015-08-27 20:05:48 +000017int __attribute__((target("no-aes, arch=ivybridge"))) qax(int a) { return 4; }
Eric Christopheraf4d6082015-07-06 23:51:59 +000018
Eric Christophera7260af2015-10-08 20:10:18 +000019int __attribute__((target("no-mmx"))) qq(int a) { return 40; }
20
Andrey Turetskiyfd259ff2016-04-05 15:04:26 +000021int __attribute__((target("arch=lakemont"))) lake(int a) { return 4; }
22
Eric Christopher11acf732015-06-12 01:35:52 +000023// Check that we emit the additional subtarget and cpu features for foo and not for baz or bar.
24// CHECK: baz{{.*}} #0
25// CHECK: foo{{.*}} #1
Eric Christopher64a247b2015-06-12 01:35:56 +000026// We ignore the tune attribute so walrus should be identical to baz and bar.
27// CHECK: walrus{{.*}} #0
Eric Christopher249e3762015-06-12 01:36:00 +000028// We're currently ignoring the fpmath attribute so koala should be identical to baz and bar.
29// CHECK: koala{{.*}} #0
Eric Christopher4dfe0752015-06-12 01:35:58 +000030// CHECK: echidna{{.*}} #2
Eric Christophera15a35e2015-08-29 02:59:37 +000031// CHECK: panda{{.*}} #3
Eric Christopher11acf732015-06-12 01:35:52 +000032// CHECK: bar{{.*}} #0
Eric Christopheraf4d6082015-07-06 23:51:59 +000033// CHECK: qux{{.*}} #1
Eric Christopher3a98b3c2015-08-27 19:59:34 +000034// CHECK: qax{{.*}} #4
Eric Christophera7260af2015-10-08 20:10:18 +000035// CHECK: qq{{.*}} #5
Andrey Turetskiyfd259ff2016-04-05 15:04:26 +000036// CHECK: lake{{.*}} #6
Andrey Turetskiy5f1cf5f2016-03-23 11:15:10 +000037// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
38// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
39// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"
40// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
41// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes"
42// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx"
Andrey Turetskiyfd259ff2016-04-05 15:04:26 +000043// CHECK: #6 = {{.*}}"target-cpu"="lakemont" "target-features"="+mmx,+sse,+sse2"