summaryrefslogtreecommitdiff
path: root/test/CodeGen/3dnow-builtins.c
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-03-04 05:26:16 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-03-04 05:26:16 +0000
commitba5d18afaa1f6ec960952c9891f82074b97ad3df (patch)
tree7a9df1a88bc2c93ded98d5942f7d52e8dec0fff6 /test/CodeGen/3dnow-builtins.c
parente9edec07b08d287b7cbf7d789f5992813e7796c6 (diff)
downloadclang-ba5d18afaa1f6ec960952c9891f82074b97ad3df.tar.gz
[X86] Pass __m64 types via SSE registers for GCC compatibility
For compatibility with GCC, classify __m64 as SSE. However, clang is a platform compiler for certain targets; retain our old behavior on those targets: classify __m64 as integer. This fixes PR26832. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@262688 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/3dnow-builtins.c')
-rw-r--r--test/CodeGen/3dnow-builtins.c78
1 files changed, 52 insertions, 26 deletions
diff --git a/test/CodeGen/3dnow-builtins.c b/test/CodeGen/3dnow-builtins.c
index d534349a74..fdee2a7619 100644
--- a/test/CodeGen/3dnow-builtins.c
+++ b/test/CodeGen/3dnow-builtins.c
@@ -1,4 +1,5 @@
-// RUN: %clang_cc1 %s -triple=x86_64-unknown-unknown -target-feature +3dnowa -emit-llvm -o - -Werror | FileCheck %s
+// RUN: %clang_cc1 %s -triple=x86_64-unknown-unknown -target-feature +3dnowa -emit-llvm -o - -Werror | FileCheck %s -check-prefix=GCC -check-prefix=CHECK
+// RUN: %clang_cc1 %s -triple=x86_64-scei-ps4 -target-feature +3dnowa -emit-llvm -o - -Werror | FileCheck %s -check-prefix=PS4 -check-prefix=CHECK
// Don't include mm_malloc.h, it's system specific.
#define __MM_MALLOC_H
@@ -6,151 +7,176 @@
#include <x86intrin.h>
__m64 test_m_pavgusb(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pavgusb
+ // PS4-LABEL: define i64 @test_m_pavgusb
+ // GCC-LABEL: define double @test_m_pavgusb
// CHECK: @llvm.x86.3dnow.pavgusb
return _m_pavgusb(m1, m2);
}
__m64 test_m_pf2id(__m64 m) {
- // CHECK-LABEL: define i64 @test_m_pf2id
+ // PS4-LABEL: define i64 @test_m_pf2id
+ // GCC-LABEL: define double @test_m_pf2id
// CHECK: @llvm.x86.3dnow.pf2id
return _m_pf2id(m);
}
__m64 test_m_pfacc(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfacc
+ // PS4-LABEL: define i64 @test_m_pfacc
+ // GCC-LABEL: define double @test_m_pfacc
// CHECK: @llvm.x86.3dnow.pfacc
return _m_pfacc(m1, m2);
}
__m64 test_m_pfadd(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfadd
+ // PS4-LABEL: define i64 @test_m_pfadd
+ // GCC-LABEL: define double @test_m_pfadd
// CHECK: @llvm.x86.3dnow.pfadd
return _m_pfadd(m1, m2);
}
__m64 test_m_pfcmpeq(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfcmpeq
+ // PS4-LABEL: define i64 @test_m_pfcmpeq
+ // GCC-LABEL: define double @test_m_pfcmpeq
// CHECK: @llvm.x86.3dnow.pfcmpeq
return _m_pfcmpeq(m1, m2);
}
__m64 test_m_pfcmpge(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfcmpge
+ // PS4-LABEL: define i64 @test_m_pfcmpge
+ // GCC-LABEL: define double @test_m_pfcmpge
// CHECK: @llvm.x86.3dnow.pfcmpge
return _m_pfcmpge(m1, m2);
}
__m64 test_m_pfcmpgt(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfcmpgt
+ // PS4-LABEL: define i64 @test_m_pfcmpgt
+ // GCC-LABEL: define double @test_m_pfcmpgt
// CHECK: @llvm.x86.3dnow.pfcmpgt
return _m_pfcmpgt(m1, m2);
}
__m64 test_m_pfmax(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfmax
+ // PS4-LABEL: define i64 @test_m_pfmax
+ // GCC-LABEL: define double @test_m_pfmax
// CHECK: @llvm.x86.3dnow.pfmax
return _m_pfmax(m1, m2);
}
__m64 test_m_pfmin(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfmin
+ // PS4-LABEL: define i64 @test_m_pfmin
+ // GCC-LABEL: define double @test_m_pfmin
// CHECK: @llvm.x86.3dnow.pfmin
return _m_pfmin(m1, m2);
}
__m64 test_m_pfmul(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfmul
+ // PS4-LABEL: define i64 @test_m_pfmul
+ // GCC-LABEL: define double @test_m_pfmul
// CHECK: @llvm.x86.3dnow.pfmul
return _m_pfmul(m1, m2);
}
__m64 test_m_pfrcp(__m64 m) {
- // CHECK-LABEL: define i64 @test_m_pfrcp
+ // PS4-LABEL: define i64 @test_m_pfrcp
+ // GCC-LABEL: define double @test_m_pfrcp
// CHECK: @llvm.x86.3dnow.pfrcp
return _m_pfrcp(m);
}
__m64 test_m_pfrcpit1(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfrcpit1
+ // PS4-LABEL: define i64 @test_m_pfrcpit1
+ // GCC-LABEL: define double @test_m_pfrcpit1
// CHECK: @llvm.x86.3dnow.pfrcpit1
return _m_pfrcpit1(m1, m2);
}
__m64 test_m_pfrcpit2(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfrcpit2
+ // PS4-LABEL: define i64 @test_m_pfrcpit2
+ // GCC-LABEL: define double @test_m_pfrcpit2
// CHECK: @llvm.x86.3dnow.pfrcpit2
return _m_pfrcpit2(m1, m2);
}
__m64 test_m_pfrsqrt(__m64 m) {
- // CHECK-LABEL: define i64 @test_m_pfrsqrt
+ // PS4-LABEL: define i64 @test_m_pfrsqrt
+ // GCC-LABEL: define double @test_m_pfrsqrt
// CHECK: @llvm.x86.3dnow.pfrsqrt
return _m_pfrsqrt(m);
}
__m64 test_m_pfrsqrtit1(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfrsqrtit1
+ // PS4-LABEL: define i64 @test_m_pfrsqrtit1
+ // GCC-LABEL: define double @test_m_pfrsqrtit1
// CHECK: @llvm.x86.3dnow.pfrsqit1
return _m_pfrsqrtit1(m1, m2);
}
__m64 test_m_pfsub(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfsub
+ // PS4-LABEL: define i64 @test_m_pfsub
+ // GCC-LABEL: define double @test_m_pfsub
// CHECK: @llvm.x86.3dnow.pfsub
return _m_pfsub(m1, m2);
}
__m64 test_m_pfsubr(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfsubr
+ // PS4-LABEL: define i64 @test_m_pfsubr
+ // GCC-LABEL: define double @test_m_pfsubr
// CHECK: @llvm.x86.3dnow.pfsubr
return _m_pfsubr(m1, m2);
}
__m64 test_m_pi2fd(__m64 m) {
- // CHECK-LABEL: define i64 @test_m_pi2fd
+ // PS4-LABEL: define i64 @test_m_pi2fd
+ // GCC-LABEL: define double @test_m_pi2fd
// CHECK: @llvm.x86.3dnow.pi2fd
return _m_pi2fd(m);
}
__m64 test_m_pmulhrw(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pmulhrw
+ // PS4-LABEL: define i64 @test_m_pmulhrw
+ // GCC-LABEL: define double @test_m_pmulhrw
// CHECK: @llvm.x86.3dnow.pmulhrw
return _m_pmulhrw(m1, m2);
}
__m64 test_m_pf2iw(__m64 m) {
- // CHECK-LABEL: define i64 @test_m_pf2iw
+ // PS4-LABEL: define i64 @test_m_pf2iw
+ // GCC-LABEL: define double @test_m_pf2iw
// CHECK: @llvm.x86.3dnowa.pf2iw
return _m_pf2iw(m);
}
__m64 test_m_pfnacc(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfnacc
+ // PS4-LABEL: define i64 @test_m_pfnacc
+ // GCC-LABEL: define double @test_m_pfnacc
// CHECK: @llvm.x86.3dnowa.pfnacc
return _m_pfnacc(m1, m2);
}
__m64 test_m_pfpnacc(__m64 m1, __m64 m2) {
- // CHECK-LABEL: define i64 @test_m_pfpnacc
+ // PS4-LABEL: define i64 @test_m_pfpnacc
+ // GCC-LABEL: define double @test_m_pfpnacc
// CHECK: @llvm.x86.3dnowa.pfpnacc
return _m_pfpnacc(m1, m2);
}
__m64 test_m_pi2fw(__m64 m) {
- // CHECK-LABEL: define i64 @test_m_pi2fw
+ // PS4-LABEL: define i64 @test_m_pi2fw
+ // GCC-LABEL: define double @test_m_pi2fw
// CHECK: @llvm.x86.3dnowa.pi2fw
return _m_pi2fw(m);
}
__m64 test_m_pswapdsf(__m64 m) {
- // CHECK-LABEL: define i64 @test_m_pswapdsf
+ // PS4-LABEL: define i64 @test_m_pswapdsf
+ // GCC-LABEL: define double @test_m_pswapdsf
// CHECK: @llvm.x86.3dnowa.pswapd
return _m_pswapdsf(m);
}
__m64 test_m_pswapdsi(__m64 m) {
- // CHECK-LABEL: define i64 @test_m_pswapdsi
+ // PS4-LABEL: define i64 @test_m_pswapdsi
+ // GCC-LABEL: define double @test_m_pswapdsi
// CHECK: @llvm.x86.3dnowa.pswapd
return _m_pswapdsi(m);
}