aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Schouten <ed@FreeBSD.org>2009-06-07 09:21:25 +0000
committerEd Schouten <ed@FreeBSD.org>2009-06-07 09:21:25 +0000
commit70b4596d9d0d559e94f9bad8f43463e5d98a577e (patch)
tree57fdd33d153490269ca615ac308de731d00669da
parent37f6c480c696a4a72c1701ee54624cc807aa80ba (diff)
downloadsrc-vendor/clang/clang-r73021.tar.gz
src-vendor/clang/clang-r73021.zip
Import Clang r73021.vendor/clang/clang-r73021
-rw-r--r--include/clang/AST/X86Builtins.def129
-rw-r--r--lib/AST/DeclObjC.cpp10
-rw-r--r--lib/CodeGen/ABIInfo.h7
-rw-r--r--lib/CodeGen/CGBuiltin.cpp221
-rw-r--r--lib/CodeGen/CGCall.cpp46
-rw-r--r--lib/CodeGen/CGExpr.cpp8
-rw-r--r--lib/CodeGen/TargetABIInfo.cpp28
-rw-r--r--lib/Headers/CMakeLists.txt23
-rw-r--r--lib/Headers/xmmintrin.h11
-rw-r--r--lib/Sema/SemaDeclObjC.cpp7
-rw-r--r--test/CodeGen/builtins-x86.c147
-rw-r--r--test/CodeGen/vector.c8
-rw-r--r--test/CodeGen/x86.c8
-rw-r--r--test/Sema/builtins.c9
-rw-r--r--www/latest_checker.html.incl2
15 files changed, 92 insertions, 572 deletions
diff --git a/include/clang/AST/X86Builtins.def b/include/clang/AST/X86Builtins.def
index 710efa8cee4b..95d000346378 100644
--- a/include/clang/AST/X86Builtins.def
+++ b/include/clang/AST/X86Builtins.def
@@ -12,9 +12,6 @@
//
//===----------------------------------------------------------------------===//
-// FIXME: this needs to be the full list supported by GCC. Right now, I'm just
-// adding stuff on demand.
-
// The format of this database matches clang/AST/Builtins.def.
// FIXME: In GCC, these builtins are defined depending on whether support for
@@ -54,37 +51,12 @@ BUILTIN(__builtin_ia32_ucomisdle, "iV2dV2d", "")
BUILTIN(__builtin_ia32_ucomisdgt, "iV2dV2d", "")
BUILTIN(__builtin_ia32_ucomisdge, "iV2dV2d", "")
BUILTIN(__builtin_ia32_ucomisdneq, "iV2dV2d", "")
-BUILTIN(__builtin_ia32_addps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_subps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_mulps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_divps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_addss, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_subss, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_mulss, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_divss, "V4fV4fV4f", "")
BUILTIN(__builtin_ia32_cmpps, "V4fV4fV4fc", "")
BUILTIN(__builtin_ia32_cmpss, "V4fV4fV4fc", "")
BUILTIN(__builtin_ia32_minps, "V4fV4fV4f", "")
BUILTIN(__builtin_ia32_maxps, "V4fV4fV4f", "")
BUILTIN(__builtin_ia32_minss, "V4fV4fV4f", "")
BUILTIN(__builtin_ia32_maxss, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_andps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_andnps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_orps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_xorps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_movss, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_movhlps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_movlhps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_unpckhps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_unpcklps, "V4fV4fV4f", "")
-BUILTIN(__builtin_ia32_paddb, "V8cV8cV8c", "")
-BUILTIN(__builtin_ia32_paddw, "V4sV4sV4s", "")
-BUILTIN(__builtin_ia32_paddd, "V2iV2iV2i", "")
-BUILTIN(__builtin_ia32_paddq, "V1LLiV1LLiV1LLi", "")
-BUILTIN(__builtin_ia32_psubb, "V8cV8cV8c", "")
-BUILTIN(__builtin_ia32_psubw, "V4sV4sV4s", "")
-BUILTIN(__builtin_ia32_psubd, "V2iV2iV2i", "")
-BUILTIN(__builtin_ia32_psubq, "V1LLiV1LLiV1LLi", "")
BUILTIN(__builtin_ia32_paddsb, "V8cV8cV8c", "")
BUILTIN(__builtin_ia32_paddsw, "V4sV4sV4s", "")
BUILTIN(__builtin_ia32_psubsb, "V8cV8cV8c", "")
@@ -93,13 +65,8 @@ BUILTIN(__builtin_ia32_paddusb, "V8cV8cV8c", "")
BUILTIN(__builtin_ia32_paddusw, "V4sV4sV4s", "")
BUILTIN(__builtin_ia32_psubusb, "V8cV8cV8c", "")
BUILTIN(__builtin_ia32_psubusw, "V4sV4sV4s", "")
-BUILTIN(__builtin_ia32_pmullw, "V4sV4sV4s", "")
BUILTIN(__builtin_ia32_pmulhw, "V4sV4sV4s", "")
BUILTIN(__builtin_ia32_pmulhuw, "V4sV4sV4s", "")
-BUILTIN(__builtin_ia32_pand, "V1LLiV1LLiV1LLi", "")
-BUILTIN(__builtin_ia32_pandn, "V1LLiV1LLiV1LLi", "")
-BUILTIN(__builtin_ia32_por, "V1LLiV1LLiV1LLi", "")
-BUILTIN(__builtin_ia32_pxor, "V1LLiV1LLiV1LLi", "")
BUILTIN(__builtin_ia32_pavgb, "V8cV8cV8c", "")
BUILTIN(__builtin_ia32_pavgw, "V4sV4sV4s", "")
BUILTIN(__builtin_ia32_pcmpeqb, "V8cV8cV8c", "")
@@ -118,35 +85,12 @@ BUILTIN(__builtin_ia32_punpckhdq, "V2iV2iV2i", "")
BUILTIN(__builtin_ia32_punpcklbw, "V8cV8cV8c", "")
BUILTIN(__builtin_ia32_punpcklwd, "V4sV4sV4s", "")
BUILTIN(__builtin_ia32_punpckldq, "V2iV2iV2i", "")
-BUILTIN(__builtin_ia32_addpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_subpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_mulpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_divpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_addsd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_subsd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_mulsd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_divsd, "V2dV2dV2d", "")
BUILTIN(__builtin_ia32_cmppd, "V2dV2dV2dc", "")
BUILTIN(__builtin_ia32_cmpsd, "V2dV2dV2dc", "")
BUILTIN(__builtin_ia32_minpd, "V2dV2dV2d", "")
BUILTIN(__builtin_ia32_maxpd, "V2dV2dV2d", "")
BUILTIN(__builtin_ia32_minsd, "V2dV2dV2d", "")
BUILTIN(__builtin_ia32_maxsd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_andpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_andnpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_orpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_xorpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_movsd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_unpckhpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_unpcklpd, "V2dV2dV2d", "")
-BUILTIN(__builtin_ia32_paddb128, "V16cV16cV16c", "")
-BUILTIN(__builtin_ia32_paddw128, "V8sV8sV8s", "")
-BUILTIN(__builtin_ia32_paddd128, "V4iV4iV4i", "")
-BUILTIN(__builtin_ia32_paddq128, "V2LLiV2LLiV2LLi", "")
-BUILTIN(__builtin_ia32_psubb128, "V16cV16cV16c", "")
-BUILTIN(__builtin_ia32_psubw128, "V8sV8sV8s", "")
-BUILTIN(__builtin_ia32_psubd128, "V4iV4iV4i", "")
-BUILTIN(__builtin_ia32_psubq128, "V2LLiV2LLiV2LLi", "")
BUILTIN(__builtin_ia32_paddsb128, "V16cV16cV16c", "")
BUILTIN(__builtin_ia32_paddsw128, "V8sV8sV8s", "")
BUILTIN(__builtin_ia32_psubsb128, "V16cV16cV16c", "")
@@ -157,10 +101,6 @@ BUILTIN(__builtin_ia32_psubusb128, "V16cV16cV16c", "")
BUILTIN(__builtin_ia32_psubusw128, "V8sV8sV8s", "")
BUILTIN(__builtin_ia32_pmullw128, "V8sV8sV8s", "")
BUILTIN(__builtin_ia32_pmulhw128, "V8sV8sV8s", "")
-BUILTIN(__builtin_ia32_pand128, "V2LLiV2LLiV2LLi", "")
-BUILTIN(__builtin_ia32_pandn128, "V2LLiV2LLiV2LLi", "")
-BUILTIN(__builtin_ia32_por128, "V2LLiV2LLiV2LLi", "")
-BUILTIN(__builtin_ia32_pxor128, "V2LLiV2LLiV2LLi", "")
BUILTIN(__builtin_ia32_pavgb128, "V16cV16cV16c", "")
BUILTIN(__builtin_ia32_pavgw128, "V8sV8sV8s", "")
BUILTIN(__builtin_ia32_pcmpeqb128, "V16cV16cV16c", "")
@@ -173,14 +113,6 @@ BUILTIN(__builtin_ia32_pmaxub128, "V16cV16cV16c", "")
BUILTIN(__builtin_ia32_pmaxsw128, "V8sV8sV8s", "")
BUILTIN(__builtin_ia32_pminub128, "V16cV16cV16c", "")
BUILTIN(__builtin_ia32_pminsw128, "V8sV8sV8s", "")
-BUILTIN(__builtin_ia32_punpckhbw128, "V16cV16cV16c", "")
-BUILTIN(__builtin_ia32_punpckhwd128, "V8sV8sV8s", "")
-BUILTIN(__builtin_ia32_punpckhdq128, "V4iV4iV4i", "")
-BUILTIN(__builtin_ia32_punpckhqdq128, "V2LLiV2LLiV2LLi", "")
-BUILTIN(__builtin_ia32_punpcklbw128, "V16cV16cV16c", "")
-BUILTIN(__builtin_ia32_punpcklwd128, "V8sV8sV8s", "")
-BUILTIN(__builtin_ia32_punpckldq128, "V4iV4iV4i", "")
-BUILTIN(__builtin_ia32_punpcklqdq128, "V2LLiV2LLiV2LLi", "")
BUILTIN(__builtin_ia32_packsswb128, "V8sV8sV8s", "")
BUILTIN(__builtin_ia32_packssdw128, "V4iV4iV4i", "")
BUILTIN(__builtin_ia32_packuswb128, "V8sV8sV8s", "")
@@ -229,7 +161,6 @@ BUILTIN(__builtin_ia32_psrld, "V2iV2iV1LLi", "")
BUILTIN(__builtin_ia32_psrlq, "V1LLiV1LLiV1LLi", "")
BUILTIN(__builtin_ia32_psraw, "V4sV4sV1LLi", "")
BUILTIN(__builtin_ia32_psrad, "V2iV2iV1LLi", "")
-BUILTIN(__builtin_ia32_pshufw, "V4sV4si", "")
BUILTIN(__builtin_ia32_pmaddwd, "V2iV4sV4s", "")
BUILTIN(__builtin_ia32_packsswb, "V8cV4sV4s", "")
BUILTIN(__builtin_ia32_packssdw, "V4sV2iV2i", "")
@@ -238,18 +169,12 @@ BUILTIN(__builtin_ia32_ldmxcsr, "vUi", "")
BUILTIN(__builtin_ia32_stmxcsr, "Ui", "")
BUILTIN(__builtin_ia32_cvtpi2ps, "V4fV4fV2i", "")
BUILTIN(__builtin_ia32_cvtps2pi, "V2iV4f", "")
-BUILTIN(__builtin_ia32_cvtsi2ss, "V4fV4fi", "")
-BUILTIN(__builtin_ia32_cvtsi642ss, "V4fV4fLLi", "")
BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "")
BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "")
BUILTIN(__builtin_ia32_cvttps2pi, "V2iV4f", "")
-BUILTIN(__builtin_ia32_cvttss2si, "iV4f", "")
-BUILTIN(__builtin_ia32_cvttss2si64, "LLiV4f", "")
BUILTIN(__builtin_ia32_maskmovq, "vV8cV8cc*", "")
BUILTIN(__builtin_ia32_loadups, "V4ffC*", "")
BUILTIN(__builtin_ia32_storeups, "vf*V4f", "")
-BUILTIN(__builtin_ia32_loadhps, "V4fV4fV2i*", "")
-BUILTIN(__builtin_ia32_loadlps, "V4fV4fV2i*", "")
BUILTIN(__builtin_ia32_storehps, "vV2i*V4f", "")
BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "")
BUILTIN(__builtin_ia32_movmskps, "iV4f", "")
@@ -264,50 +189,17 @@ BUILTIN(__builtin_ia32_rsqrtps, "V4fV4f", "")
BUILTIN(__builtin_ia32_rsqrtss, "V4fV4f", "")
BUILTIN(__builtin_ia32_sqrtps, "V4fV4f", "")
BUILTIN(__builtin_ia32_sqrtss, "V4fV4f", "")
-BUILTIN(__builtin_ia32_shufps, "V4fV4fV4fi", "")
-BUILTIN(__builtin_ia32_femms, "v", "")
-BUILTIN(__builtin_ia32_pavgusb, "V8cV8cV8c", "")
-BUILTIN(__builtin_ia32_pf2id, "V2iV2f", "")
-BUILTIN(__builtin_ia32_pfacc, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfadd, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfcmpeq, "V2iV2fV2f", "")
-BUILTIN(__builtin_ia32_pfcmpge, "V2iV2fV2f", "")
-BUILTIN(__builtin_ia32_pfcmpgt, "V2iV2fV2f", "")
-BUILTIN(__builtin_ia32_pfmax, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfmin, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfmul, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfrcp, "V2fV2f", "")
-BUILTIN(__builtin_ia32_pfrcpit1, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfrcpit2, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfrsqrt, "V2fV2f", "")
-BUILTIN(__builtin_ia32_pfrsqit1, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfsub, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfsubr, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pi2fd, "V2fV2i", "")
-BUILTIN(__builtin_ia32_pmulhrw, "V4sV4sV4s", "")
-BUILTIN(__builtin_ia32_pf2iw, "V2iV2f", "")
-BUILTIN(__builtin_ia32_pfnacc, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pfpnacc, "V2fV2fV2f", "")
-BUILTIN(__builtin_ia32_pi2fw, "V2fV2i", "")
-BUILTIN(__builtin_ia32_pswapdsf, "V2fV2f", "")
-BUILTIN(__builtin_ia32_pswapdsi, "V2iV2i", "")
BUILTIN(__builtin_ia32_maskmovdqu, "vV16cV16cc*", "")
BUILTIN(__builtin_ia32_loadupd, "V2ddC*", "")
BUILTIN(__builtin_ia32_storeupd, "vd*V2d", "")
-BUILTIN(__builtin_ia32_loadhpd, "V2dV2ddC*", "")
-BUILTIN(__builtin_ia32_loadlpd, "V2dV2ddC*", "")
BUILTIN(__builtin_ia32_movmskpd, "iV2d", "")
BUILTIN(__builtin_ia32_pmovmskb128, "iV16c", "")
BUILTIN(__builtin_ia32_movnti, "vi*i", "")
BUILTIN(__builtin_ia32_movntpd, "vd*V2d", "")
BUILTIN(__builtin_ia32_movntdq, "vV2LLi*V2LLi", "")
-BUILTIN(__builtin_ia32_pshufd, "V4iV4ii", "")
-BUILTIN(__builtin_ia32_pshuflw, "V8sV8si", "")
-BUILTIN(__builtin_ia32_pshufhw, "V8sV8si", "")
BUILTIN(__builtin_ia32_psadbw128, "V2LLiV16cV16c", "")
BUILTIN(__builtin_ia32_sqrtpd, "V2dV2d", "")
BUILTIN(__builtin_ia32_sqrtsd, "V2dV2d", "")
-BUILTIN(__builtin_ia32_shufpd, "V2dV2dV2di", "")
BUILTIN(__builtin_ia32_cvtdq2pd, "V2dV4i", "")
BUILTIN(__builtin_ia32_cvtdq2ps, "V4fV4i", "")
BUILTIN(__builtin_ia32_cvtpd2dq, "V2LLiV2d", "")
@@ -317,16 +209,10 @@ BUILTIN(__builtin_ia32_cvttpd2dq, "V4iV2d", "")
BUILTIN(__builtin_ia32_cvttpd2pi, "V2iV2d", "")
BUILTIN(__builtin_ia32_cvtpi2pd, "V2dV2i", "")
BUILTIN(__builtin_ia32_cvtsd2si, "iV2d", "")
-BUILTIN(__builtin_ia32_cvttsd2si, "iV2d", "")
BUILTIN(__builtin_ia32_cvtsd2si64, "LLiV2d", "")
-BUILTIN(__builtin_ia32_cvttsd2si64, "LLiV2d", "")
BUILTIN(__builtin_ia32_cvtps2dq, "V4iV4f", "")
BUILTIN(__builtin_ia32_cvtps2pd, "V2dV4f", "")
BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "")
-BUILTIN(__builtin_ia32_cvtsi2sd, "V2dV2di", "")
-BUILTIN(__builtin_ia32_cvtsi642sd, "V2dV2dLLi", "")
-BUILTIN(__builtin_ia32_cvtsd2ss, "V4fV4fV2d", "")
-BUILTIN(__builtin_ia32_cvtss2sd, "V2dV2dV4f", "")
BUILTIN(__builtin_ia32_clflush, "vvC*", "")
BUILTIN(__builtin_ia32_lfence, "v", "")
BUILTIN(__builtin_ia32_mfence, "v", "")
@@ -368,21 +254,6 @@ BUILTIN(__builtin_ia32_movsldup, "V4fV4f", "")
BUILTIN(__builtin_ia32_lddqu, "V16ccC*", "")
BUILTIN(__builtin_ia32_palignr128, "V2LLiV2LLiV2LLii", "")
BUILTIN(__builtin_ia32_palignr, "V1LLiV1LLiV1LLis", "")
-BUILTIN(__builtin_ia32_vec_init_v2si, "V2iii", "")
-BUILTIN(__builtin_ia32_vec_init_v4hi, "V4sssss", "")
-BUILTIN(__builtin_ia32_vec_init_v8qi, "V8ccccccccc", "")
-BUILTIN(__builtin_ia32_vec_ext_v2df, "dV2di", "")
-BUILTIN(__builtin_ia32_vec_ext_v2di, "LLiV2LLii", "")
-BUILTIN(__builtin_ia32_vec_ext_v4sf, "fV4fi", "")
-BUILTIN(__builtin_ia32_vec_ext_v4si, "iV4ii", "")
-BUILTIN(__builtin_ia32_vec_ext_v8hi, "UsV8si", "")
-BUILTIN(__builtin_ia32_vec_ext_v4hi, "sV4si", "")
-BUILTIN(__builtin_ia32_vec_ext_v2si, "iV2ii", "")
-BUILTIN(__builtin_ia32_vec_set_v8hi, "V8sV8ssi", "")
-BUILTIN(__builtin_ia32_vec_set_v4hi, "V4sV4ssi", "")
-BUILTIN(__builtin_ia32_vec_set_v16qi, "V16cV16cii", "")
-BUILTIN(__builtin_ia32_vec_set_v4si, "V4iV4iii", "")
-BUILTIN(__builtin_ia32_vec_set_v2di, "V2LLiV2LLiLLii", "")
BUILTIN(__builtin_ia32_insertps128, "V4fV4fV4fi", "")
BUILTIN(__builtin_ia32_loadlv4si, "V4iV2i*", "")
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp
index 21aefdd567bc..60a96d0471ab 100644
--- a/lib/AST/DeclObjC.cpp
+++ b/lib/AST/DeclObjC.cpp
@@ -156,16 +156,6 @@ ObjCIvarDecl *ObjCInterfaceDecl::lookupInstanceVariable(
clsDeclared = ClassDecl;
return I;
}
- // look into properties.
- for (ObjCInterfaceDecl::prop_iterator I = ClassDecl->prop_begin(Context),
- E = ClassDecl->prop_end(Context); I != E; ++I) {
- ObjCPropertyDecl *PDecl = (*I);
- if (ObjCIvarDecl *IV = PDecl->getPropertyIvarDecl())
- if (IV->getIdentifier() == ID) {
- clsDeclared = ClassDecl;
- return IV;
- }
- }
ClassDecl = ClassDecl->getSuperClass();
}
return NULL;
diff --git a/lib/CodeGen/ABIInfo.h b/lib/CodeGen/ABIInfo.h
index 44af0c476aa5..58e5a778cf33 100644
--- a/lib/CodeGen/ABIInfo.h
+++ b/lib/CodeGen/ABIInfo.h
@@ -44,6 +44,9 @@ namespace clang {
/// converted LLVM type. Complex and structure types
/// are passed using first class aggregates.
+ Extend, /// Valid only for integer argument types. Same as 'direct'
+ /// but also emit a zero/sign extension attribute.
+
Indirect, /// Pass the argument indirectly via a hidden pointer
/// with the specified alignment (0 indicates default
/// alignment).
@@ -79,6 +82,9 @@ namespace clang {
static ABIArgInfo getDirect() {
return ABIArgInfo(Direct);
}
+ static ABIArgInfo getExtend() {
+ return ABIArgInfo(Extend);
+ }
static ABIArgInfo getIgnore() {
return ABIArgInfo(Ignore);
}
@@ -94,6 +100,7 @@ namespace clang {
Kind getKind() const { return TheKind; }
bool isDirect() const { return TheKind == Direct; }
+ bool isExtend() const { return TheKind == Extend; }
bool isIgnore() const { return TheKind == Ignore; }
bool isCoerce() const { return TheKind == Coerce; }
bool isIndirect() const { return TheKind == Indirect; }
diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp
index d813bbae7f06..3c7c5e539879 100644
--- a/lib/CodeGen/CGBuiltin.cpp
+++ b/lib/CodeGen/CGBuiltin.cpp
@@ -625,81 +625,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
switch (BuiltinID) {
default: return 0;
- case X86::BI__builtin_ia32_mulps:
- return Builder.CreateMul(Ops[0], Ops[1], "mulps");
- case X86::BI__builtin_ia32_mulpd:
- return Builder.CreateMul(Ops[0], Ops[1], "mulpd");
- case X86::BI__builtin_ia32_pand:
- case X86::BI__builtin_ia32_pand128:
- return Builder.CreateAnd(Ops[0], Ops[1], "pand");
- case X86::BI__builtin_ia32_por:
- case X86::BI__builtin_ia32_por128:
- return Builder.CreateOr(Ops[0], Ops[1], "por");
- case X86::BI__builtin_ia32_pxor:
- case X86::BI__builtin_ia32_pxor128:
- return Builder.CreateXor(Ops[0], Ops[1], "pxor");
- case X86::BI__builtin_ia32_pandn:
- case X86::BI__builtin_ia32_pandn128:
- Ops[0] = Builder.CreateNot(Ops[0], "tmp");
- return Builder.CreateAnd(Ops[0], Ops[1], "pandn");
- case X86::BI__builtin_ia32_paddb:
- case X86::BI__builtin_ia32_paddb128:
- case X86::BI__builtin_ia32_paddd:
- case X86::BI__builtin_ia32_paddd128:
- case X86::BI__builtin_ia32_paddq:
- case X86::BI__builtin_ia32_paddq128:
- case X86::BI__builtin_ia32_paddw:
- case X86::BI__builtin_ia32_paddw128:
- case X86::BI__builtin_ia32_addps:
- case X86::BI__builtin_ia32_addpd:
- return Builder.CreateAdd(Ops[0], Ops[1], "add");
- case X86::BI__builtin_ia32_psubb:
- case X86::BI__builtin_ia32_psubb128:
- case X86::BI__builtin_ia32_psubd:
- case X86::BI__builtin_ia32_psubd128:
- case X86::BI__builtin_ia32_psubq:
- case X86::BI__builtin_ia32_psubq128:
- case X86::BI__builtin_ia32_psubw:
- case X86::BI__builtin_ia32_psubw128:
- case X86::BI__builtin_ia32_subps:
- case X86::BI__builtin_ia32_subpd:
- return Builder.CreateSub(Ops[0], Ops[1], "sub");
- case X86::BI__builtin_ia32_divps:
- return Builder.CreateFDiv(Ops[0], Ops[1], "divps");
- case X86::BI__builtin_ia32_divpd:
- return Builder.CreateFDiv(Ops[0], Ops[1], "divpd");
- case X86::BI__builtin_ia32_pmullw:
- case X86::BI__builtin_ia32_pmullw128:
- return Builder.CreateMul(Ops[0], Ops[1], "pmul");
- case X86::BI__builtin_ia32_punpckhbw:
- return EmitShuffleVector(Ops[0], Ops[1], 4, 12, 5, 13, 6, 14, 7, 15,
- "punpckhbw");
- case X86::BI__builtin_ia32_punpckhbw128:
- return EmitShuffleVector(Ops[0], Ops[1], 8, 24, 9, 25, 10, 26, 11, 27,
- 12, 28, 13, 29, 14, 30, 15, 31,
- "punpckhbw");
- case X86::BI__builtin_ia32_punpckhwd:
- return EmitShuffleVector(Ops[0], Ops[1], 2, 6, 3, 7, "punpckhwd");
- case X86::BI__builtin_ia32_punpckhwd128:
- return EmitShuffleVector(Ops[0], Ops[1], 4, 12, 5, 13, 6, 14, 7, 15,
- "punpckhwd");
- case X86::BI__builtin_ia32_punpckhdq:
- return EmitShuffleVector(Ops[0], Ops[1], 1, 3, "punpckhdq");
- case X86::BI__builtin_ia32_punpckhdq128:
- return EmitShuffleVector(Ops[0], Ops[1], 2, 6, 3, 7, "punpckhdq");
- case X86::BI__builtin_ia32_punpckhqdq128:
- return EmitShuffleVector(Ops[0], Ops[1], 1, 3, "punpckhqdq");
- case X86::BI__builtin_ia32_punpcklbw:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 8, 1, 9, 2, 10, 3, 11,
- "punpcklbw");
- case X86::BI__builtin_ia32_punpcklwd:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 4, 1, 5, "punpcklwd");
- case X86::BI__builtin_ia32_punpckldq:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 2, "punpckldq");
- case X86::BI__builtin_ia32_punpckldq128:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 4, 1, 5, "punpckldq");
- case X86::BI__builtin_ia32_punpcklqdq128:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 2, "punpcklqdq");
case X86::BI__builtin_ia32_pslldi128:
case X86::BI__builtin_ia32_psllqi128:
case X86::BI__builtin_ia32_psllwi128:
@@ -807,46 +732,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
llvm::Function *F = CGM.getIntrinsic(ID);
return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), name);
}
- case X86::BI__builtin_ia32_pshufw: {
- unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue();
- return EmitShuffleVector(Ops[0], Ops[0],
- i & 0x3, (i & 0xc) >> 2,
- (i & 0x30) >> 4, (i & 0xc0) >> 6,
- "pshufw");
- }
- case X86::BI__builtin_ia32_pshuflw: {
- unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue();
- return EmitShuffleVector(Ops[0], Ops[0],
- i & 0x3, (i & 0xc) >> 2,
- (i & 0x30) >> 4, (i & 0xc0) >> 6, 4, 5, 6, 7,
- "pshuflw");
- }
- case X86::BI__builtin_ia32_pshufhw: {
- unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue();
- return EmitShuffleVector(Ops[0], Ops[0], 0, 1, 2, 3,
- 4 + (i & 0x3), 4 + ((i & 0xc) >> 2),
- 4 + ((i & 0x30) >> 4), 4 + ((i & 0xc0) >> 6),
- "pshufhw");
- }
- case X86::BI__builtin_ia32_pshufd: {
- unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue();
- return EmitShuffleVector(Ops[0], Ops[0],
- i & 0x3, (i & 0xc) >> 2,
- (i & 0x30) >> 4, (i & 0xc0) >> 6,
- "pshufd");
- }
- case X86::BI__builtin_ia32_vec_init_v4hi:
- case X86::BI__builtin_ia32_vec_init_v8qi:
- case X86::BI__builtin_ia32_vec_init_v2si:
- return EmitVector(&Ops[0], Ops.size());
- case X86::BI__builtin_ia32_vec_ext_v2si:
- case X86::BI__builtin_ia32_vec_ext_v2di:
- case X86::BI__builtin_ia32_vec_ext_v4sf:
- case X86::BI__builtin_ia32_vec_ext_v4si:
- case X86::BI__builtin_ia32_vec_ext_v8hi:
- case X86::BI__builtin_ia32_vec_ext_v4hi:
- case X86::BI__builtin_ia32_vec_ext_v2df:
- return Builder.CreateExtractElement(Ops[0], Ops[1], "result");
case X86::BI__builtin_ia32_cmpps: {
llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse_cmp_ps);
return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), "cmpps");
@@ -879,63 +764,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse2_cmp_sd);
return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), "cmpsd");
}
- case X86::BI__builtin_ia32_movss:
- return EmitShuffleVector(Ops[0], Ops[1], 4, 1, 2, 3, "movss");
- case X86::BI__builtin_ia32_shufps: {
- unsigned i = cast<ConstantInt>(Ops[2])->getZExtValue();
- return EmitShuffleVector(Ops[0], Ops[1],
- i & 0x3, (i & 0xc) >> 2,
- ((i & 0x30) >> 4) + 4,
- ((i & 0xc0) >> 6) + 4, "shufps");
- }
- case X86::BI__builtin_ia32_shufpd: {
- unsigned i = cast<ConstantInt>(Ops[2])->getZExtValue();
- return EmitShuffleVector(Ops[0], Ops[1], i & 1,
- ((i & 2) >> 1)+2, "shufpd");
- }
- case X86::BI__builtin_ia32_punpcklbw128:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 16, 1, 17, 2, 18, 3, 19,
- 4, 20, 5, 21, 6, 22, 7, 23,
- "punpcklbw");
- case X86::BI__builtin_ia32_punpcklwd128:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 8, 1, 9, 2, 10, 3, 11,
- "punpcklwd");
- case X86::BI__builtin_ia32_movlhps:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 1, 4, 5, "movlhps");
- case X86::BI__builtin_ia32_movhlps:
- return EmitShuffleVector(Ops[0], Ops[1], 6, 7, 2, 3, "movhlps");
- case X86::BI__builtin_ia32_unpckhps:
- return EmitShuffleVector(Ops[0], Ops[1], 2, 6, 3, 7, "unpckhps");
- case X86::BI__builtin_ia32_unpcklps:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 4, 1, 5, "unpcklps");
- case X86::BI__builtin_ia32_unpckhpd:
- return EmitShuffleVector(Ops[0], Ops[1], 1, 3, "unpckhpd");
- case X86::BI__builtin_ia32_unpcklpd:
- return EmitShuffleVector(Ops[0], Ops[1], 0, 2, "unpcklpd");
- case X86::BI__builtin_ia32_movsd:
- return EmitShuffleVector(Ops[0], Ops[1], 2, 1, "movsd");
- case X86::BI__builtin_ia32_loadlps:
- case X86::BI__builtin_ia32_loadhps: {
- // FIXME: This should probably be represented as
- // shuffle (dst, (v4f32 (insert undef, (load i64), 0)), shuf mask hi/lo)
- const llvm::Type *EltTy = llvm::Type::DoubleTy;
- const llvm::Type *VecTy = llvm::VectorType::get(EltTy, 2);
- const llvm::Type *OrigTy = Ops[0]->getType();
- unsigned Index = BuiltinID == X86::BI__builtin_ia32_loadlps ? 0 : 1;
- llvm::Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, Index);
- Ops[1] = Builder.CreateBitCast(Ops[1], llvm::PointerType::getUnqual(EltTy));
- Ops[1] = Builder.CreateLoad(Ops[1], "tmp");
- Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast");
- Ops[0] = Builder.CreateInsertElement(Ops[0], Ops[1], Idx, "loadps");
- return Builder.CreateBitCast(Ops[0], OrigTy, "loadps");
- }
- case X86::BI__builtin_ia32_loadlpd:
- case X86::BI__builtin_ia32_loadhpd: {
- Ops[1] = Builder.CreateLoad(Ops[1], "tmp");
- unsigned Index = BuiltinID == X86::BI__builtin_ia32_loadlpd ? 0 : 1;
- llvm::Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, Index);
- return Builder.CreateInsertElement(Ops[0], Ops[1], Idx, "loadpd");
- }
case X86::BI__builtin_ia32_storehps:
case X86::BI__builtin_ia32_storelps: {
const llvm::Type *EltTy = llvm::Type::Int64Ty;
@@ -977,55 +805,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
return Builder.CreateBitCast(Ops[0],
llvm::VectorType::get(llvm::Type::Int32Ty, 4));
}
- case X86::BI__builtin_ia32_vec_set_v4hi:
- case X86::BI__builtin_ia32_vec_set_v8hi:
- return Builder.CreateInsertElement(Ops[0], Ops[1], Ops[2], "pinsrw");
- case X86::BI__builtin_ia32_vec_set_v4si:
- return Builder.CreateInsertElement(Ops[0], Ops[1], Ops[2], "pinsrd");
- case X86::BI__builtin_ia32_vec_set_v2di:
- return Builder.CreateInsertElement(Ops[0], Ops[1], Ops[2], "pinsrq");
- case X86::BI__builtin_ia32_andps:
- case X86::BI__builtin_ia32_andpd:
- case X86::BI__builtin_ia32_andnps:
- case X86::BI__builtin_ia32_andnpd:
- case X86::BI__builtin_ia32_orps:
- case X86::BI__builtin_ia32_orpd:
- case X86::BI__builtin_ia32_xorpd:
- case X86::BI__builtin_ia32_xorps: {
- const llvm::Type *ITy = llvm::VectorType::get(llvm::Type::Int32Ty, 4);
- const llvm::Type *FTy = Ops[0]->getType();
- Ops[0] = Builder.CreateBitCast(Ops[0], ITy, "bitcast");
- Ops[1] = Builder.CreateBitCast(Ops[1], ITy, "bitcast");
- switch (BuiltinID) {
- case X86::BI__builtin_ia32_andps:
- Ops[0] = Builder.CreateAnd(Ops[0], Ops[1], "andps");
- break;
- case X86::BI__builtin_ia32_andpd:
- Ops[0] = Builder.CreateAnd(Ops[0], Ops[1], "andpd");
- break;
- case X86::BI__builtin_ia32_andnps:
- Ops[0] = Builder.CreateNot(Ops[0], "not");
- Ops[0] = Builder.CreateAnd(Ops[0], Ops[1], "andnps");
- break;
- case X86::BI__builtin_ia32_andnpd:
- Ops[0] = Builder.CreateNot(Ops[0], "not");
- Ops[0] = Builder.CreateAnd(Ops[0], Ops[1], "andnpd");
- break;
- case X86::BI__builtin_ia32_orps:
- Ops[0] = Builder.CreateOr(Ops[0], Ops[1], "orps");
- break;
- case X86::BI__builtin_ia32_orpd:
- Ops[0] = Builder.CreateOr(Ops[0], Ops[1], "orpd");
- break;
- case X86::BI__builtin_ia32_xorps:
- Ops[0] = Builder.CreateXor(Ops[0], Ops[1], "xorps");
- break;
- case X86::BI__builtin_ia32_xorpd:
- Ops[0] = Builder.CreateXor(Ops[0], Ops[1], "xorpd");
- break;
- }
- return Builder.CreateBitCast(Ops[0], FTy, "bitcast");
- }
}
}
diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp
index b46e860b2eff..b10b9c2d9de1 100644
--- a/lib/CodeGen/CGCall.cpp
+++ b/lib/CodeGen/CGCall.cpp
@@ -314,6 +314,7 @@ CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI, bool IsVariadic) {
case ABIArgInfo::Expand:
assert(0 && "Invalid ABI kind for return argument");
+ case ABIArgInfo::Extend:
case ABIArgInfo::Direct:
ResultType = ConvertType(RetTy);
break;
@@ -353,7 +354,8 @@ CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI, bool IsVariadic) {
ArgTys.push_back(llvm::PointerType::getUnqual(LTy));
break;
}
-
+
+ case ABIArgInfo::Extend:
case ABIArgInfo::Direct:
ArgTys.push_back(ConvertType(it->type));
break;
@@ -394,14 +396,14 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
unsigned Index = 1;
const ABIArgInfo &RetAI = FI.getReturnInfo();
switch (RetAI.getKind()) {
+ case ABIArgInfo::Extend:
+ if (RetTy->isSignedIntegerType()) {
+ RetAttrs |= llvm::Attribute::SExt;
+ } else if (RetTy->isUnsignedIntegerType()) {
+ RetAttrs |= llvm::Attribute::ZExt;
+ }
+ // FALLTHROUGH
case ABIArgInfo::Direct:
- if (RetTy->isPromotableIntegerType()) {
- if (RetTy->isSignedIntegerType()) {
- RetAttrs |= llvm::Attribute::SExt;
- } else if (RetTy->isUnsignedIntegerType()) {
- RetAttrs |= llvm::Attribute::ZExt;
- }
- }
break;
case ABIArgInfo::Indirect:
@@ -452,15 +454,15 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
FuncAttrs &= ~(llvm::Attribute::ReadOnly |
llvm::Attribute::ReadNone);
break;
-
+
+ case ABIArgInfo::Extend:
+ if (ParamType->isSignedIntegerType()) {
+ Attributes |= llvm::Attribute::SExt;
+ } else if (ParamType->isUnsignedIntegerType()) {
+ Attributes |= llvm::Attribute::ZExt;
+ }
+ // FALLS THROUGH
case ABIArgInfo::Direct:
- if (ParamType->isPromotableIntegerType()) {
- if (ParamType->isSignedIntegerType()) {
- Attributes |= llvm::Attribute::SExt;
- } else if (ParamType->isUnsignedIntegerType()) {
- Attributes |= llvm::Attribute::ZExt;
- }
- }
if (RegParm > 0 &&
(ParamType->isIntegerType() || ParamType->isPointerType())) {
RegParm -=
@@ -536,7 +538,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
EmitParmDecl(*Arg, V);
break;
}
-
+
+ case ABIArgInfo::Extend:
case ABIArgInfo::Direct: {
assert(AI != Fn->arg_end() && "Argument mismatch!");
llvm::Value* V = AI;
@@ -618,10 +621,10 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
llvm::Value *RV = 0;
// Functions with no result always return void.
- if (ReturnValue) {
+ if (ReturnValue) {
QualType RetTy = FI.getReturnType();
const ABIArgInfo &RetAI = FI.getReturnInfo();
-
+
switch (RetAI.getKind()) {
case ABIArgInfo::Indirect:
if (RetTy->isAnyComplexType()) {
@@ -630,11 +633,12 @@ void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
} else if (CodeGenFunction::hasAggregateLLVMType(RetTy)) {
EmitAggregateCopy(CurFn->arg_begin(), ReturnValue, RetTy);
} else {
- EmitStoreOfScalar(Builder.CreateLoad(ReturnValue), CurFn->arg_begin(),
+ EmitStoreOfScalar(Builder.CreateLoad(ReturnValue), CurFn->arg_begin(),
false, RetTy);
}
break;
+ case ABIArgInfo::Extend:
case ABIArgInfo::Direct:
// The internal return value temp always will have
// pointer-to-return-type type.
@@ -705,6 +709,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
}
break;
+ case ABIArgInfo::Extend:
case ABIArgInfo::Direct:
if (RV.isScalar()) {
Args.push_back(RV.getScalarVal());
@@ -791,6 +796,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
return RValue::getAggregate(Args[0]);
return RValue::get(EmitLoadOfScalar(Args[0], false, RetTy));
+ case ABIArgInfo::Extend:
case ABIArgInfo::Direct:
if (RetTy->isAnyComplexType()) {
llvm::Value *Real = Builder.CreateExtractValue(CI, 0);
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index c5f23879d1c3..c52e6bd0c5c7 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -843,14 +843,16 @@ LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) {
LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) {
// The index must always be an integer, which is not an aggregate. Emit it.
llvm::Value *Idx = EmitScalarExpr(E->getIdx());
-
+ QualType IdxTy = E->getIdx()->getType();
+ bool IdxSigned = IdxTy->isSignedIntegerType();
+
// If the base is a vector type, then we are forming a vector element lvalue
// with this subscript.
if (E->getBase()->getType()->isVectorType()) {
// Emit the vector as an lvalue to get its address.
LValue LHS = EmitLValue(E->getBase());
assert(LHS.isSimple() && "Can only subscript lvalue vectors here!");
- // FIXME: This should properly sign/zero/extend or truncate Idx to i32.
+ Idx = Builder.CreateIntCast(Idx, llvm::Type::Int32Ty, IdxSigned, "vidx");
return LValue::MakeVectorElt(LHS.getAddress(), Idx,
E->getBase()->getType().getCVRQualifiers());
}
@@ -859,8 +861,6 @@ LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) {
llvm::Value *Base = EmitScalarExpr(E->getBase());
// Extend or truncate the index type to 32 or 64-bits.
- QualType IdxTy = E->getIdx()->getType();
- bool IdxSigned = IdxTy->isSignedIntegerType();
unsigned IdxBitwidth = cast<llvm::IntegerType>(Idx->getType())->getBitWidth();
if (IdxBitwidth != LLVMPointerWidth)
Idx = Builder.CreateIntCast(Idx, llvm::IntegerType::get(LLVMPointerWidth),
diff --git a/lib/CodeGen/TargetABIInfo.cpp b/lib/CodeGen/TargetABIInfo.cpp
index 573ffed10a01..6f7bea2340a9 100644
--- a/lib/CodeGen/TargetABIInfo.cpp
+++ b/lib/CodeGen/TargetABIInfo.cpp
@@ -28,6 +28,9 @@ void ABIArgInfo::dump() const {
case Direct:
fprintf(stderr, "Direct");
break;
+ case Extend:
+ fprintf(stderr, "Extend");
+ break;
case Ignore:
fprintf(stderr, "Ignore");
break;
@@ -342,7 +345,8 @@ ABIArgInfo X86_32ABIInfo::classifyReturnType(QualType RetTy,
return ABIArgInfo::getIndirect(0);
} else {
- return ABIArgInfo::getDirect();
+ return (RetTy->isPromotableIntegerType() ?
+ ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
}
}
@@ -371,7 +375,8 @@ ABIArgInfo X86_32ABIInfo::classifyArgumentType(QualType Ty,
return ABIArgInfo::getIndirect(0);
} else {
- return ABIArgInfo::getDirect();
+ return (Ty->isPromotableIntegerType() ?
+ ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
}
}
@@ -750,8 +755,8 @@ ABIArgInfo X86_64ABIInfo::getCoerceResult(QualType Ty,
// Integer and pointer types will end up in a general purpose
// register.
if (Ty->isIntegralType() || Ty->isPointerType())
- return ABIArgInfo::getDirect();
-
+ return (Ty->isPromotableIntegerType() ?
+ ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
} else if (CoerceTo == llvm::Type::DoubleTy) {
// FIXME: It would probably be better to make CGFunctionInfo only map using
// canonical types than to canonize here.
@@ -771,7 +776,8 @@ ABIArgInfo X86_64ABIInfo::getIndirectResult(QualType Ty,
// If this is a scalar LLVM value then assume LLVM will pass it in the right
// place naturally.
if (!CodeGenFunction::hasAggregateLLVMType(Ty))
- return ABIArgInfo::getDirect();
+ return (Ty->isPromotableIntegerType() ?
+ ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
// FIXME: Set alignment correctly.
return ABIArgInfo::getIndirect(0);
@@ -1267,7 +1273,8 @@ void ARMABIInfo::computeInfo(CGFunctionInfo &FI, ASTContext &Context) const {
ABIArgInfo ARMABIInfo::classifyArgumentType(QualType Ty,
ASTContext &Context) const {
if (!CodeGenFunction::hasAggregateLLVMType(Ty)) {
- return ABIArgInfo::getDirect();
+ return (Ty->isPromotableIntegerType() ?
+ ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
}
// FIXME: This is kind of nasty... but there isn't much choice because the ARM
// backend doesn't support byval.
@@ -1299,7 +1306,8 @@ ABIArgInfo ARMABIInfo::classifyReturnType(QualType RetTy,
return ABIArgInfo::getCoerce(llvm::Type::Int32Ty);
return ABIArgInfo::getIndirect(0);
} else {
- return ABIArgInfo::getDirect();
+ return (RetTy->isPromotableIntegerType() ?
+ ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
}
}
@@ -1335,7 +1343,8 @@ ABIArgInfo DefaultABIInfo::classifyReturnType(QualType RetTy,
} else if (CodeGenFunction::hasAggregateLLVMType(RetTy)) {
return ABIArgInfo::getIndirect(0);
} else {
- return ABIArgInfo::getDirect();
+ return (RetTy->isPromotableIntegerType() ?
+ ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
}
}
@@ -1344,7 +1353,8 @@ ABIArgInfo DefaultABIInfo::classifyArgumentType(QualType Ty,
if (CodeGenFunction::hasAggregateLLVMType(Ty)) {
return ABIArgInfo::getIndirect(0);
} else {
- return ABIArgInfo::getDirect();
+ return (Ty->isPromotableIntegerType() ?
+ ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
}
}
diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt
index 3c42167e5a18..e44c37aabc8f 100644
--- a/lib/Headers/CMakeLists.txt
+++ b/lib/Headers/CMakeLists.txt
@@ -1,12 +1,21 @@
set(files
- iso646.h
- mmintrin.h
- stdarg.h
- stdbool.h
- stddef.h
- )
+ emmintrin.h
+ float.h
+ iso646.h
+ limits.h
+ mm_malloc.h
+ mmintrin.h
+ pmmintrin.h
+ stdarg.h
+ stdbool.h
+ stddef.h
+ stdint.h
+ tgmath.h
+ tmmintrin.h
+ xmmintrin.h)
-set(output_dir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../Headers)
+#FIXME: Centralize Clang version info
+set(output_dir ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib/clang/1.0/include)
foreach( f ${files} )
set( src ${CMAKE_CURRENT_SOURCE_DIR}/${f} )
diff --git a/lib/Headers/xmmintrin.h b/lib/Headers/xmmintrin.h
index 7291f88979e4..4938399063cd 100644
--- a/lib/Headers/xmmintrin.h
+++ b/lib/Headers/xmmintrin.h
@@ -464,20 +464,19 @@ _mm_cvtss_f32(__m128 a)
static inline __m128 __attribute__((__always_inline__, __nodebug__))
_mm_loadh_pi(__m128 a, __m64 const *p)
{
- return __builtin_ia32_loadhps(a, (__v2si *)p);
+ __m128 b;
+ b[0] = *(float*)p;
+ b[1] = *((float*)p+1);
+ return __builtin_shufflevector(a, b, 0, 1, 4, 5);
}
static inline __m128 __attribute__((__always_inline__, __nodebug__))
_mm_loadl_pi(__m128 a, __m64 const *p)
{
-#if 0
- // FIXME: This should work, but gives really crappy code at the moment
__m128 b;
b[0] = *(float*)p;
b[1] = *((float*)p+1);
- return __builtin_shufflevector(a, b, 0, 1, 4, 5);
-#endif
- return __builtin_ia32_loadlps(a, (__v2si *)p);
+ return __builtin_shufflevector(a, b, 4, 5, 2, 3);
}
static inline __m128 __attribute__((__always_inline__, __nodebug__))
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index 2500a8f77551..5d475163cb3a 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -1996,10 +1996,15 @@ Sema::DeclPtrTy Sema::ActOnPropertyImplDecl(SourceLocation AtLoc,
ObjCInterfaceDecl *ClassDeclared;
Ivar = IDecl->lookupInstanceVariable(Context, PropertyIvar, ClassDeclared);
if (!Ivar) {
- Ivar = ObjCIvarDecl::Create(Context, CurContext, PropertyLoc,
+ DeclContext *EnclosingContext = cast_or_null<DeclContext>(IDecl);
+ assert(EnclosingContext &&
+ "null DeclContext for synthesized ivar - ActOnPropertyImplDecl");
+ Ivar = ObjCIvarDecl::Create(Context, EnclosingContext, PropertyLoc,
PropertyIvar, PropType,
ObjCIvarDecl::Public,
(Expr *)0);
+ Ivar->setLexicalDeclContext(IDecl);
+ IDecl->addDecl(Context, Ivar);
property->setPropertyIvarDecl(Ivar);
if (!getLangOptions().ObjCNonFragileABI)
Diag(PropertyLoc, diag::error_missing_property_ivar_decl) << PropertyId;
diff --git a/test/CodeGen/builtins-x86.c b/test/CodeGen/builtins-x86.c
index 33ab36074fe0..8d4bcbfab17b 100644
--- a/test/CodeGen/builtins-x86.c
+++ b/test/CodeGen/builtins-x86.c
@@ -101,14 +101,6 @@ void f0() {
tmp_i = __builtin_ia32_ucomisdgt(tmp_V2d, tmp_V2d);
tmp_i = __builtin_ia32_ucomisdge(tmp_V2d, tmp_V2d);
tmp_i = __builtin_ia32_ucomisdneq(tmp_V2d, tmp_V2d);
- tmp_V4f = __builtin_ia32_addps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_subps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_mulps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_divps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_addss(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_subss(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_mulss(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_divss(tmp_V4f, tmp_V4f);
tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 0);
tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 1);
tmp_V4f = __builtin_ia32_cmpps(tmp_V4f, tmp_V4f, 2);
@@ -129,24 +121,7 @@ void f0() {
tmp_V4f = __builtin_ia32_maxps(tmp_V4f, tmp_V4f);
tmp_V4f = __builtin_ia32_minss(tmp_V4f, tmp_V4f);
tmp_V4f = __builtin_ia32_maxss(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_andps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_andnps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_orps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_xorps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_movss(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_movhlps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_movlhps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_unpckhps(tmp_V4f, tmp_V4f);
- tmp_V4f = __builtin_ia32_unpcklps(tmp_V4f, tmp_V4f);
- tmp_V8c = __builtin_ia32_paddb(tmp_V8c, tmp_V8c);
- tmp_V4s = __builtin_ia32_paddw(tmp_V4s, tmp_V4s);
- tmp_V2i = __builtin_ia32_paddd(tmp_V2i, tmp_V2i);
- tmp_V1LLi = __builtin_ia32_paddq(tmp_V1LLi, tmp_V1LLi);
- tmp_V8c = __builtin_ia32_psubb(tmp_V8c, tmp_V8c);
- tmp_V4s = __builtin_ia32_psubw(tmp_V4s, tmp_V4s);
- tmp_V2i = __builtin_ia32_psubd(tmp_V2i, tmp_V2i);
- tmp_V1LLi = __builtin_ia32_psubq(tmp_V1LLi, tmp_V1LLi);
tmp_V8c = __builtin_ia32_paddsb(tmp_V8c, tmp_V8c);
tmp_V4s = __builtin_ia32_paddsw(tmp_V4s, tmp_V4s);
tmp_V8c = __builtin_ia32_psubsb(tmp_V8c, tmp_V8c);
@@ -155,13 +130,8 @@ void f0() {
tmp_V4s = __builtin_ia32_paddusw(tmp_V4s, tmp_V4s);
tmp_V8c = __builtin_ia32_psubusb(tmp_V8c, tmp_V8c);
tmp_V4s = __builtin_ia32_psubusw(tmp_V4s, tmp_V4s);
- tmp_V4s = __builtin_ia32_pmullw(tmp_V4s, tmp_V4s);
tmp_V4s = __builtin_ia32_pmulhw(tmp_V4s, tmp_V4s);
tmp_V4s = __builtin_ia32_pmulhuw(tmp_V4s, tmp_V4s);
- tmp_V1LLi = __builtin_ia32_pand(tmp_V1LLi, tmp_V1LLi);
- tmp_V1LLi = __builtin_ia32_pandn(tmp_V1LLi, tmp_V1LLi);
- tmp_V1LLi = __builtin_ia32_por(tmp_V1LLi, tmp_V1LLi);
- tmp_V1LLi = __builtin_ia32_pxor(tmp_V1LLi, tmp_V1LLi);
tmp_V8c = __builtin_ia32_pavgb(tmp_V8c, tmp_V8c);
tmp_V4s = __builtin_ia32_pavgw(tmp_V4s, tmp_V4s);
tmp_V8c = __builtin_ia32_pcmpeqb(tmp_V8c, tmp_V8c);
@@ -174,20 +144,6 @@ void f0() {
tmp_V4s = __builtin_ia32_pmaxsw(tmp_V4s, tmp_V4s);
tmp_V8c = __builtin_ia32_pminub(tmp_V8c, tmp_V8c);
tmp_V4s = __builtin_ia32_pminsw(tmp_V4s, tmp_V4s);
- tmp_V8c = __builtin_ia32_punpckhbw(tmp_V8c, tmp_V8c);
- tmp_V4s = __builtin_ia32_punpckhwd(tmp_V4s, tmp_V4s);
- tmp_V2i = __builtin_ia32_punpckhdq(tmp_V2i, tmp_V2i);
- tmp_V8c = __builtin_ia32_punpcklbw(tmp_V8c, tmp_V8c);
- tmp_V4s = __builtin_ia32_punpcklwd(tmp_V4s, tmp_V4s);
- tmp_V2i = __builtin_ia32_punpckldq(tmp_V2i, tmp_V2i);
- tmp_V2d = __builtin_ia32_addpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_subpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_mulpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_divpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_addsd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_subsd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_mulsd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_divsd(tmp_V2d, tmp_V2d);
tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 0);
tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 1);
tmp_V2d = __builtin_ia32_cmppd(tmp_V2d, tmp_V2d, 2);
@@ -208,21 +164,6 @@ void f0() {
tmp_V2d = __builtin_ia32_maxpd(tmp_V2d, tmp_V2d);
tmp_V2d = __builtin_ia32_minsd(tmp_V2d, tmp_V2d);
tmp_V2d = __builtin_ia32_maxsd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_andpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_andnpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_orpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_xorpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_movsd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_unpckhpd(tmp_V2d, tmp_V2d);
- tmp_V2d = __builtin_ia32_unpcklpd(tmp_V2d, tmp_V2d);
- tmp_V16c = __builtin_ia32_paddb128(tmp_V16c, tmp_V16c);
- tmp_V8s = __builtin_ia32_paddw128(tmp_V8s, tmp_V8s);
- tmp_V4i = __builtin_ia32_paddd128(tmp_V4i, tmp_V4i);
- tmp_V2LLi = __builtin_ia32_paddq128(tmp_V2LLi, tmp_V2LLi);
- tmp_V16c = __builtin_ia32_psubb128(tmp_V16c, tmp_V16c);
- tmp_V8s = __builtin_ia32_psubw128(tmp_V8s, tmp_V8s);
- tmp_V4i = __builtin_ia32_psubd128(tmp_V4i, tmp_V4i);
- tmp_V2LLi = __builtin_ia32_psubq128(tmp_V2LLi, tmp_V2LLi);
tmp_V16c = __builtin_ia32_paddsb128(tmp_V16c, tmp_V16c);
tmp_V8s = __builtin_ia32_paddsw128(tmp_V8s, tmp_V8s);
tmp_V16c = __builtin_ia32_psubsb128(tmp_V16c, tmp_V16c);
@@ -231,12 +172,7 @@ void f0() {
tmp_V8s = __builtin_ia32_paddusw128(tmp_V8s, tmp_V8s);
tmp_V16c = __builtin_ia32_psubusb128(tmp_V16c, tmp_V16c);
tmp_V8s = __builtin_ia32_psubusw128(tmp_V8s, tmp_V8s);
- tmp_V8s = __builtin_ia32_pmullw128(tmp_V8s, tmp_V8s);
tmp_V8s = __builtin_ia32_pmulhw128(tmp_V8s, tmp_V8s);
- tmp_V2LLi = __builtin_ia32_pand128(tmp_V2LLi, tmp_V2LLi);
- tmp_V2LLi = __builtin_ia32_pandn128(tmp_V2LLi, tmp_V2LLi);
- tmp_V2LLi = __builtin_ia32_por128(tmp_V2LLi, tmp_V2LLi);
- tmp_V2LLi = __builtin_ia32_pxor128(tmp_V2LLi, tmp_V2LLi);
tmp_V16c = __builtin_ia32_pavgb128(tmp_V16c, tmp_V16c);
tmp_V8s = __builtin_ia32_pavgw128(tmp_V8s, tmp_V8s);
tmp_V16c = __builtin_ia32_pcmpeqb128(tmp_V16c, tmp_V16c);
@@ -249,14 +185,6 @@ void f0() {
tmp_V8s = __builtin_ia32_pmaxsw128(tmp_V8s, tmp_V8s);
tmp_V16c = __builtin_ia32_pminub128(tmp_V16c, tmp_V16c);
tmp_V8s = __builtin_ia32_pminsw128(tmp_V8s, tmp_V8s);
- tmp_V16c = __builtin_ia32_punpckhbw128(tmp_V16c, tmp_V16c);
- tmp_V8s = __builtin_ia32_punpckhwd128(tmp_V8s, tmp_V8s);
- tmp_V4i = __builtin_ia32_punpckhdq128(tmp_V4i, tmp_V4i);
- tmp_V2LLi = __builtin_ia32_punpckhqdq128(tmp_V2LLi, tmp_V2LLi);
- tmp_V16c = __builtin_ia32_punpcklbw128(tmp_V16c, tmp_V16c);
- tmp_V8s = __builtin_ia32_punpcklwd128(tmp_V8s, tmp_V8s);
- tmp_V4i = __builtin_ia32_punpckldq128(tmp_V4i, tmp_V4i);
- tmp_V2LLi = __builtin_ia32_punpcklqdq128(tmp_V2LLi, tmp_V2LLi);
tmp_V8s = __builtin_ia32_packsswb128(tmp_V8s, tmp_V8s);
tmp_V4i = __builtin_ia32_packssdw128(tmp_V4i, tmp_V4i);
tmp_V8s = __builtin_ia32_packuswb128(tmp_V8s, tmp_V8s);
@@ -305,9 +233,6 @@ void f0() {
tmp_V1LLi = __builtin_ia32_psrlq(tmp_V1LLi, tmp_V1LLi);
tmp_V4s = __builtin_ia32_psraw(tmp_V4s, tmp_V1LLi);
tmp_V2i = __builtin_ia32_psrad(tmp_V2i, tmp_V1LLi);
-#ifdef USE_ALL
- tmp_V4s = __builtin_ia32_pshufw(tmp_V4s, imm_i);
-#endif
tmp_V2i = __builtin_ia32_pmaddwd(tmp_V4s, tmp_V4s);
tmp_V8c = __builtin_ia32_packsswb(tmp_V4s, tmp_V4s);
tmp_V4s = __builtin_ia32_packssdw(tmp_V2i, tmp_V2i);
@@ -317,24 +242,14 @@ void f0() {
tmp_Ui = __builtin_ia32_stmxcsr();
tmp_V4f = __builtin_ia32_cvtpi2ps(tmp_V4f, tmp_V2i);
tmp_V2i = __builtin_ia32_cvtps2pi(tmp_V4f);
- tmp_V4f = __builtin_ia32_cvtsi2ss(tmp_V4f, tmp_i);
-#ifdef USE_64
- tmp_V4f = __builtin_ia32_cvtsi642ss(tmp_V4f, tmp_LLi);
-#endif
tmp_i = __builtin_ia32_cvtss2si(tmp_V4f);
#ifdef USE_64
tmp_LLi = __builtin_ia32_cvtss2si64(tmp_V4f);
#endif
tmp_V2i = __builtin_ia32_cvttps2pi(tmp_V4f);
- tmp_i = __builtin_ia32_cvttss2si(tmp_V4f);
-#ifdef USE_64
- tmp_LLi = __builtin_ia32_cvttss2si64(tmp_V4f);
-#endif
(void) __builtin_ia32_maskmovq(tmp_V8c, tmp_V8c, tmp_cp);
tmp_V4f = __builtin_ia32_loadups(tmp_fCp);
(void) __builtin_ia32_storeups(tmp_fp, tmp_V4f);
- tmp_V4f = __builtin_ia32_loadhps(tmp_V4f, tmp_V2ip);
- tmp_V4f = __builtin_ia32_loadlps(tmp_V4f, tmp_V2ip);
(void) __builtin_ia32_storehps(tmp_V2ip, tmp_V4f);
(void) __builtin_ia32_storelps(tmp_V2ip, tmp_V4f);
tmp_i = __builtin_ia32_movmskps(tmp_V4f);
@@ -350,54 +265,17 @@ void f0() {
tmp_V4f = __builtin_ia32_rsqrtss(tmp_V4f);
tmp_V4f = __builtin_ia32_sqrtps(tmp_V4f);
tmp_V4f = __builtin_ia32_sqrtss(tmp_V4f);
- tmp_V4f = __builtin_ia32_shufps(tmp_V4f, tmp_V4f, imm_i);
-#ifdef USE_3DNOW
- (void) __builtin_ia32_femms();
- tmp_V8c = __builtin_ia32_pavgusb(tmp_V8c, tmp_V8c);
- tmp_V2i = __builtin_ia32_pf2id(tmp_V2f);
- tmp_V2f = __builtin_ia32_pfacc(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfadd(tmp_V2f, tmp_V2f);
- tmp_V2i = __builtin_ia32_pfcmpeq(tmp_V2f, tmp_V2f);
- tmp_V2i = __builtin_ia32_pfcmpge(tmp_V2f, tmp_V2f);
- tmp_V2i = __builtin_ia32_pfcmpgt(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfmax(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfmin(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfmul(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfrcp(tmp_V2f);
- tmp_V2f = __builtin_ia32_pfrcpit1(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfrcpit2(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfrsqrt(tmp_V2f);
- tmp_V2f = __builtin_ia32_pfrsqit1(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfsub(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfsubr(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pi2fd(tmp_V2i);
- tmp_V4s = __builtin_ia32_pmulhrw(tmp_V4s, tmp_V4s);
-#endif
-#ifdef USE_3DNOWA
- tmp_V2i = __builtin_ia32_pf2iw(tmp_V2f);
- tmp_V2f = __builtin_ia32_pfnacc(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pfpnacc(tmp_V2f, tmp_V2f);
- tmp_V2f = __builtin_ia32_pi2fw(tmp_V2i);
- tmp_V2f = __builtin_ia32_pswapdsf(tmp_V2f);
- tmp_V2i = __builtin_ia32_pswapdsi(tmp_V2i);
-#endif
(void) __builtin_ia32_maskmovdqu(tmp_V16c, tmp_V16c, tmp_cp);
tmp_V2d = __builtin_ia32_loadupd(tmp_dCp);
(void) __builtin_ia32_storeupd(tmp_dp, tmp_V2d);
- tmp_V2d = __builtin_ia32_loadhpd(tmp_V2d, tmp_dCp);
- tmp_V2d = __builtin_ia32_loadlpd(tmp_V2d, tmp_dCp);
tmp_i = __builtin_ia32_movmskpd(tmp_V2d);
tmp_i = __builtin_ia32_pmovmskb128(tmp_V16c);
(void) __builtin_ia32_movnti(tmp_ip, tmp_i);
(void) __builtin_ia32_movntpd(tmp_dp, tmp_V2d);
(void) __builtin_ia32_movntdq(tmp_V2LLip, tmp_V2LLi);
- tmp_V4i = __builtin_ia32_pshufd(tmp_V4i, imm_i);
- tmp_V8s = __builtin_ia32_pshuflw(tmp_V8s, imm_i);
- tmp_V8s = __builtin_ia32_pshufhw(tmp_V8s, imm_i);
tmp_V2LLi = __builtin_ia32_psadbw128(tmp_V16c, tmp_V16c);
tmp_V2d = __builtin_ia32_sqrtpd(tmp_V2d);
tmp_V2d = __builtin_ia32_sqrtsd(tmp_V2d);
- tmp_V2d = __builtin_ia32_shufpd(tmp_V2d, tmp_V2d, imm_i);
tmp_V2d = __builtin_ia32_cvtdq2pd(tmp_V4i);
tmp_V4f = __builtin_ia32_cvtdq2ps(tmp_V4i);
tmp_V2LLi = __builtin_ia32_cvtpd2dq(tmp_V2d);
@@ -407,20 +285,12 @@ void f0() {
tmp_V2i = __builtin_ia32_cvttpd2pi(tmp_V2d);
tmp_V2d = __builtin_ia32_cvtpi2pd(tmp_V2i);
tmp_i = __builtin_ia32_cvtsd2si(tmp_V2d);
- tmp_i = __builtin_ia32_cvttsd2si(tmp_V2d);
#ifdef USE_64
tmp_LLi = __builtin_ia32_cvtsd2si64(tmp_V2d);
- tmp_LLi = __builtin_ia32_cvttsd2si64(tmp_V2d);
#endif
tmp_V4i = __builtin_ia32_cvtps2dq(tmp_V4f);
tmp_V2d = __builtin_ia32_cvtps2pd(tmp_V4f);
tmp_V4i = __builtin_ia32_cvttps2dq(tmp_V4f);
- tmp_V2d = __builtin_ia32_cvtsi2sd(tmp_V2d, tmp_i);
-#ifdef USE_64
- tmp_V2d = __builtin_ia32_cvtsi642sd(tmp_V2d, tmp_LLi);
-#endif
- tmp_V4f = __builtin_ia32_cvtsd2ss(tmp_V4f, tmp_V2d);
- tmp_V2d = __builtin_ia32_cvtss2sd(tmp_V2d, tmp_V4f);
(void) __builtin_ia32_clflush(tmp_vCp);
(void) __builtin_ia32_lfence();
(void) __builtin_ia32_mfence();
@@ -462,20 +332,6 @@ void f0() {
tmp_V16c = __builtin_ia32_lddqu(tmp_cCp);
tmp_V2LLi = __builtin_ia32_palignr128(tmp_V2LLi, tmp_V2LLi, imm_i);
tmp_V1LLi = __builtin_ia32_palignr(tmp_V1LLi, tmp_V1LLi, imm_i);
- tmp_V2i = __builtin_ia32_vec_init_v2si(tmp_i, tmp_i);
- tmp_V4s = __builtin_ia32_vec_init_v4hi(tmp_s, tmp_s, tmp_s, tmp_s);
- tmp_V8c = __builtin_ia32_vec_init_v8qi(tmp_c, tmp_c, tmp_c, tmp_c, tmp_c, tmp_c, tmp_c, tmp_c);
- tmp_d = __builtin_ia32_vec_ext_v2df(tmp_V2d, imm_i_0_2);
- tmp_LLi = __builtin_ia32_vec_ext_v2di(tmp_V2LLi, imm_i_0_2);
- tmp_f = __builtin_ia32_vec_ext_v4sf(tmp_V4f, imm_i_0_4);
- tmp_i = __builtin_ia32_vec_ext_v4si(tmp_V4i, imm_i_0_4);
-#ifdef USE_ALL
- tmp_Us = __builtin_ia32_vec_ext_v8hi(tmp_V8s, imm_i_0_8);
- tmp_s = __builtin_ia32_vec_ext_v4hi(tmp_V4s, imm_i_0_4);
-#endif
- tmp_i = __builtin_ia32_vec_ext_v2si(tmp_V2i, imm_i_0_2);
- tmp_V8s = __builtin_ia32_vec_set_v8hi(tmp_V8s, tmp_s, imm_i_0_8);
- tmp_V4s = __builtin_ia32_vec_set_v4hi(tmp_V4s, tmp_s, imm_i_0_4);
tmp_V4i = __builtin_ia32_loadlv4si(tmp_V2ip);
(void) __builtin_ia32_storelv4si(tmp_V2ip, tmp_V2LLi);
#ifdef USE_SSE4
@@ -512,10 +368,7 @@ void f0() {
// tmp_V4f = __builtin_ia32_roundss(tmp_V4f, tmp_V4f, imm_i_0_16);
// tmp_V2d = __builtin_ia32_roundsd(tmp_V2d, tmp_V2d, imm_i_0_16);
tmp_V2d = __builtin_ia32_roundpd(tmp_V2d, imm_i_0_16);
- tmp_V16c = __builtin_ia32_vec_set_v16qi(tmp_V16c, tmp_i, tmp_i);
- tmp_V4i = __builtin_ia32_vec_set_v4si(tmp_V4i, tmp_i, tmp_i);
tmp_V4f = __builtin_ia32_insertps128(tmp_V4f, tmp_V4f, tmp_i);
- tmp_V2LLi = __builtin_ia32_vec_set_v2di(tmp_V2LLi, tmp_LLi, tmp_i);
#endif
}
diff --git a/test/CodeGen/vector.c b/test/CodeGen/vector.c
index 2e753b42c4d7..1084f6d20b9b 100644
--- a/test/CodeGen/vector.c
+++ b/test/CodeGen/vector.c
@@ -11,3 +11,11 @@ __v4hi y = {1,2,3,4};
typedef int vty __attribute((vector_size(16)));
int a() { vty b; return b[2LL]; }
+
+// PR4339
+typedef float vec4 __attribute__((vector_size(16)));
+
+void vac ( vec4* a, char b, float c )
+{
+ (*a)[b] = c;
+}
diff --git a/test/CodeGen/x86.c b/test/CodeGen/x86.c
index 10808dca8782..66d82513795b 100644
--- a/test/CodeGen/x86.c
+++ b/test/CodeGen/x86.c
@@ -13,11 +13,3 @@ void test1() {
asm ("" : "=a" (d1), "=b" (d2) :
"c" (0), "d" (0), "S" (0), "D" (0), "t" (0), "u" (0));
}
-
-
-// rdar://6803924
-typedef double T __attribute__ ((__vector_size__ (16)));
-T test2(T va) {
- return __builtin_ia32_shufpd(va, va, 3);
-}
-
diff --git a/test/Sema/builtins.c b/test/Sema/builtins.c
index e57aec51bc55..78b75624ea24 100644
--- a/test/Sema/builtins.c
+++ b/test/Sema/builtins.c
@@ -32,15 +32,6 @@ void test7() {
}
-typedef __attribute__(( ext_vector_type(16) )) unsigned char uchar16;
-
-// rdar://5905347
-unsigned char test8( short v ) {
- uchar16 c;
- return __builtin_ia32_vec_ext_v4si( c ); // expected-error {{too few arguments to function}}
-}
-
-
// atomics.
unsigned char test9(short v) {
diff --git a/www/latest_checker.html.incl b/www/latest_checker.html.incl
index 90d444a40ba1..c465cac88539 100644
--- a/www/latest_checker.html.incl
+++ b/www/latest_checker.html.incl
@@ -1 +1 @@
-<b><a href="http://checker.minormatter.com/checker-0.209.tar.bz2">checker-0.209.tar.bz2</a></b> (built May 18, 2009)
+<b><a href="http://checker.minormatter.com/checker-0.210.tar.bz2">checker-0.210.tar.bz2</a></b> (built June 6, 2009)