2017-10-28 02:32:23 +08:00
|
|
|
// RUN: %clang_cc1 -triple i686-linux-gnu -target-cpu i686 -emit-llvm %s -o - | FileCheck %s
|
2015-06-12 09:35:52 +08:00
|
|
|
|
|
|
|
int baz(int a) { return 4; }
|
|
|
|
|
|
|
|
int __attribute__((target("avx,sse4.2,arch=ivybridge"))) foo(int a) { return 4; }
|
|
|
|
|
2015-06-12 09:35:56 +08:00
|
|
|
int __attribute__((target("tune=sandybridge"))) walrus(int a) { return 4; }
|
2015-06-12 09:36:00 +08:00
|
|
|
int __attribute__((target("fpmath=387"))) koala(int a) { return 4; }
|
2015-06-12 09:35:56 +08:00
|
|
|
|
2015-08-28 04:05:48 +08:00
|
|
|
int __attribute__((target("no-sse2"))) echidna(int a) { return 4; }
|
2015-06-12 09:35:58 +08:00
|
|
|
|
2015-07-01 08:08:32 +08:00
|
|
|
int __attribute__((target("sse4"))) panda(int a) { return 4; }
|
2017-10-27 01:54:22 +08:00
|
|
|
int __attribute__((target("no-sse4"))) narwhal(int a) { return 4; }
|
2015-07-01 08:08:32 +08:00
|
|
|
|
2015-06-12 09:35:52 +08:00
|
|
|
int bar(int a) { return baz(a) + foo(a); }
|
|
|
|
|
2015-07-07 07:51:59 +08:00
|
|
|
int __attribute__((target("avx, sse4.2, arch= ivybridge"))) qux(int a) { return 4; }
|
2015-08-28 04:05:48 +08:00
|
|
|
int __attribute__((target("no-aes, arch=ivybridge"))) qax(int a) { return 4; }
|
2015-07-07 07:51:59 +08:00
|
|
|
|
Handle sse turning on mmx, but no -mmx not turning off SSE.
Rationale :
// sse3
__m128d test_mm_addsub_pd(__m128d A, __m128d B) {
return _mm_addsub_pd(A, B);
}
// mmx
void shift(__m64 a, __m64 b, int c) {
_mm_slli_pi16(a, c);
_mm_slli_pi32(a, c);
_mm_slli_si64(a, c);
_mm_srli_pi16(a, c);
_mm_srli_pi32(a, c);
_mm_srli_si64(a, c);
_mm_srai_pi16(a, c);
_mm_srai_pi32(a, c);
}
clang -msse3 -mno-mmx file.c -c
For this code we should be able to explicitly turn off MMX
without affecting the compilation of the SSE3 function and then
diagnose and error on compiling the MMX function.
This is a preparatory patch to the actual diagnosis code which is
coming in a future patch. This sets us up to have the correct information
where we need it and verifies that it's being emitted for the backend
to handle.
llvm-svn: 249733
2015-10-09 04:10:18 +08:00
|
|
|
int __attribute__((target("no-mmx"))) qq(int a) { return 40; }
|
|
|
|
|
2017-10-28 02:32:23 +08:00
|
|
|
int __attribute__((target("arch=lakemont,mmx"))) lake(int a) { return 4; }
|
2016-04-05 23:04:26 +08:00
|
|
|
|
2018-02-13 01:01:41 +08:00
|
|
|
int use_before_def(void);
|
|
|
|
int useage(void){
|
|
|
|
return use_before_def();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adding the attribute to a definition does update it in IR.
|
|
|
|
int __attribute__((target("arch=lakemont,mmx"))) use_before_def(void) {
|
|
|
|
return 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-06-12 09:35:52 +08:00
|
|
|
// Check that we emit the additional subtarget and cpu features for foo and not for baz or bar.
|
|
|
|
// CHECK: baz{{.*}} #0
|
|
|
|
// CHECK: foo{{.*}} #1
|
2015-06-12 09:35:56 +08:00
|
|
|
// We ignore the tune attribute so walrus should be identical to baz and bar.
|
|
|
|
// CHECK: walrus{{.*}} #0
|
2015-06-12 09:36:00 +08:00
|
|
|
// We're currently ignoring the fpmath attribute so koala should be identical to baz and bar.
|
|
|
|
// CHECK: koala{{.*}} #0
|
2015-06-12 09:35:58 +08:00
|
|
|
// CHECK: echidna{{.*}} #2
|
2015-08-29 10:59:37 +08:00
|
|
|
// CHECK: panda{{.*}} #3
|
2017-10-27 01:54:22 +08:00
|
|
|
// CHECK: narwhal{{.*}} #4
|
2015-06-12 09:35:52 +08:00
|
|
|
// CHECK: bar{{.*}} #0
|
2015-07-07 07:51:59 +08:00
|
|
|
// CHECK: qux{{.*}} #1
|
2017-10-27 01:54:22 +08:00
|
|
|
// CHECK: qax{{.*}} #5
|
|
|
|
// CHECK: qq{{.*}} #6
|
|
|
|
// CHECK: lake{{.*}} #7
|
2018-02-13 01:01:41 +08:00
|
|
|
// CHECK: use_before_def{{.*}} #7
|
2019-03-22 04:36:08 +08:00
|
|
|
// CHECK: #0 = {{.*}}"target-cpu"="i686" "target-features"="+cx8,+x87"
|
|
|
|
// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+cx8,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt"
|
Enable intrinsics of AVX512_BF16, which are supported for BFLOAT16 in Cooper Lake
Summary:
1. Enable infrastructure of AVX512_BF16, which is supported for BFLOAT16 in Cooper Lake;
2. Enable intrinsics for VCVTNE2PS2BF16, VCVTNEPS2BF16 and DPBF16PS instructions, which are Vector Neural Network Instructions supporting BFLOAT16 inputs and conversion instructions from IEEE single precision.
For more details about BF16 intrinsic, please refer to the latest ISE document: https://software.intel.com/en-us/download/intel-architecture-instruction-set-extensions-programming-reference
Patch by LiuTianle
Reviewers: craig.topper, smaslov, LuoYuanke, wxiao3, annita.zhang, spatel, RKSimon
Reviewed By: craig.topper
Subscribers: mgorny, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D60552
llvm-svn: 360018
2019-05-06 16:25:11 +08:00
|
|
|
// CHECK: #2 = {{.*}}"target-cpu"="i686" "target-features"="+cx8,+x87,-aes,-avx,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vpopcntdq,-f16c,-fma,-fma4,-gfni,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-vaes,-vpclmulqdq,-xop,-xsave,-xsaveopt"
|
2019-03-22 04:36:08 +08:00
|
|
|
// CHECK: #3 = {{.*}}"target-cpu"="i686" "target-features"="+cx8,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87"
|
Enable intrinsics of AVX512_BF16, which are supported for BFLOAT16 in Cooper Lake
Summary:
1. Enable infrastructure of AVX512_BF16, which is supported for BFLOAT16 in Cooper Lake;
2. Enable intrinsics for VCVTNE2PS2BF16, VCVTNEPS2BF16 and DPBF16PS instructions, which are Vector Neural Network Instructions supporting BFLOAT16 inputs and conversion instructions from IEEE single precision.
For more details about BF16 intrinsic, please refer to the latest ISE document: https://software.intel.com/en-us/download/intel-architecture-instruction-set-extensions-programming-reference
Patch by LiuTianle
Reviewers: craig.topper, smaslov, LuoYuanke, wxiao3, annita.zhang, spatel, RKSimon
Reviewed By: craig.topper
Subscribers: mgorny, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D60552
llvm-svn: 360018
2019-05-06 16:25:11 +08:00
|
|
|
// CHECK: #4 = {{.*}}"target-cpu"="i686" "target-features"="+cx8,+x87,-avx,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vpopcntdq,-f16c,-fma,-fma4,-sse4.1,-sse4.2,-vaes,-vpclmulqdq,-xop,-xsave,-xsaveopt"
|
2019-03-22 04:36:08 +08:00
|
|
|
// CHECK: #5 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+cx8,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sahf,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes,-vaes"
|
|
|
|
// CHECK: #6 = {{.*}}"target-cpu"="i686" "target-features"="+cx8,+x87,-3dnow,-3dnowa,-mmx"
|
|
|
|
// CHECK: #7 = {{.*}}"target-cpu"="lakemont" "target-features"="+cx8,+mmx"
|