From owner-svn-src-all@FreeBSD.ORG Sun Jun 7 09:21:25 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DE74E10656C9; Sun, 7 Jun 2009 09:21:25 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C13388FC15; Sun, 7 Jun 2009 09:21:25 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n579LPi7088422; Sun, 7 Jun 2009 09:21:25 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n579LPmt088410; Sun, 7 Jun 2009 09:21:25 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <200906070921.n579LPmt088410@svn.freebsd.org> From: Ed Schouten Date: Sun, 7 Jun 2009 09:21:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r193631 - in vendor/clang/dist: include/clang/AST lib/AST lib/CodeGen lib/Headers lib/Sema test/CodeGen test/Sema www X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2009 09:21:26 -0000 Author: ed Date: Sun Jun 7 09:21:25 2009 New Revision: 193631 URL: http://svn.freebsd.org/changeset/base/193631 Log: Import Clang r73021. Modified: vendor/clang/dist/include/clang/AST/X86Builtins.def vendor/clang/dist/lib/AST/DeclObjC.cpp vendor/clang/dist/lib/CodeGen/ABIInfo.h vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp vendor/clang/dist/lib/CodeGen/CGCall.cpp vendor/clang/dist/lib/CodeGen/CGExpr.cpp vendor/clang/dist/lib/CodeGen/TargetABIInfo.cpp vendor/clang/dist/lib/Headers/CMakeLists.txt vendor/clang/dist/lib/Headers/xmmintrin.h vendor/clang/dist/lib/Sema/SemaDeclObjC.cpp vendor/clang/dist/test/CodeGen/builtins-x86.c vendor/clang/dist/test/CodeGen/vector.c vendor/clang/dist/test/CodeGen/x86.c vendor/clang/dist/test/Sema/builtins.c vendor/clang/dist/www/latest_checker.html.incl Modified: vendor/clang/dist/include/clang/AST/X86Builtins.def ============================================================================== --- vendor/clang/dist/include/clang/AST/X86Builtins.def Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/include/clang/AST/X86Builtins.def Sun Jun 7 09:21:25 2009 (r193631) @@ -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, "iV2dV 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, "V8cV8cV 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, "V2iV2 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, "V16c 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, "V16cV 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, "V2iV2iV1L 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, "V4iV2 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*", "") Modified: vendor/clang/dist/lib/AST/DeclObjC.cpp ============================================================================== --- vendor/clang/dist/lib/AST/DeclObjC.cpp Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/AST/DeclObjC.cpp Sun Jun 7 09:21:25 2009 (r193631) @@ -156,16 +156,6 @@ ObjCIvarDecl *ObjCInterfaceDecl::lookupI 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; Modified: vendor/clang/dist/lib/CodeGen/ABIInfo.h ============================================================================== --- vendor/clang/dist/lib/CodeGen/ABIInfo.h Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/CodeGen/ABIInfo.h Sun Jun 7 09:21:25 2009 (r193631) @@ -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; } Modified: vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp ============================================================================== --- vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp Sun Jun 7 09:21:25 2009 (r193631) @@ -625,81 +625,6 @@ Value *CodeGenFunction::EmitX86BuiltinEx 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::EmitX86BuiltinEx 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(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(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(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(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::EmitX86BuiltinEx 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(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(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::EmitX86BuiltinEx 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"); - } } } Modified: vendor/clang/dist/lib/CodeGen/CGCall.cpp ============================================================================== --- vendor/clang/dist/lib/CodeGen/CGCall.cpp Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/CodeGen/CGCall.cpp Sun Jun 7 09:21:25 2009 (r193631) @@ -314,6 +314,7 @@ CodeGenTypes::GetFunctionType(const CGFu 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 CGFu 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::ConstructAttributeLi 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::ConstructAttributeLi 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 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 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 } 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 C } break; + case ABIArgInfo::Extend: case ABIArgInfo::Direct: if (RV.isScalar()) { Args.push_back(RV.getScalarVal()); @@ -791,6 +796,7 @@ RValue CodeGenFunction::EmitCall(const C 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); Modified: vendor/clang/dist/lib/CodeGen/CGExpr.cpp ============================================================================== --- vendor/clang/dist/lib/CodeGen/CGExpr.cpp Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/CodeGen/CGExpr.cpp Sun Jun 7 09:21:25 2009 (r193631) @@ -843,14 +843,16 @@ LValue CodeGenFunction::EmitPredefinedLV 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::EmitArraySubscri 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(Idx->getType())->getBitWidth(); if (IdxBitwidth != LLVMPointerWidth) Idx = Builder.CreateIntCast(Idx, llvm::IntegerType::get(LLVMPointerWidth), Modified: vendor/clang/dist/lib/CodeGen/TargetABIInfo.cpp ============================================================================== --- vendor/clang/dist/lib/CodeGen/TargetABIInfo.cpp Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/CodeGen/TargetABIInfo.cpp Sun Jun 7 09:21:25 2009 (r193631) @@ -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::classifyReturn return ABIArgInfo::getIndirect(0); } else { - return ABIArgInfo::getDirect(); + return (RetTy->isPromotableIntegerType() ? + ABIArgInfo::getExtend() : ABIArgInfo::getDirect()); } } @@ -371,7 +375,8 @@ ABIArgInfo X86_32ABIInfo::classifyArgume return ABIArgInfo::getIndirect(0); } else { - return ABIArgInfo::getDirect(); + return (Ty->isPromotableIntegerType() ? + ABIArgInfo::getExtend() : ABIArgInfo::getDirect()); } } @@ -750,8 +755,8 @@ ABIArgInfo X86_64ABIInfo::getCoerceResul // 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::getIndirectRes // 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(CGFunctionI 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::classifyReturnTyp 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::classifyRetur } 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::classifyArgum if (CodeGenFunction::hasAggregateLLVMType(Ty)) { return ABIArgInfo::getIndirect(0); } else { - return ABIArgInfo::getDirect(); + return (Ty->isPromotableIntegerType() ? + ABIArgInfo::getExtend() : ABIArgInfo::getDirect()); } } Modified: vendor/clang/dist/lib/Headers/CMakeLists.txt ============================================================================== --- vendor/clang/dist/lib/Headers/CMakeLists.txt Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/Headers/CMakeLists.txt Sun Jun 7 09:21:25 2009 (r193631) @@ -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} ) Modified: vendor/clang/dist/lib/Headers/xmmintrin.h ============================================================================== --- vendor/clang/dist/lib/Headers/xmmintrin.h Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/Headers/xmmintrin.h Sun Jun 7 09:21:25 2009 (r193631) @@ -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__)) Modified: vendor/clang/dist/lib/Sema/SemaDeclObjC.cpp ============================================================================== --- vendor/clang/dist/lib/Sema/SemaDeclObjC.cpp Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/lib/Sema/SemaDeclObjC.cpp Sun Jun 7 09:21:25 2009 (r193631) @@ -1996,10 +1996,15 @@ Sema::DeclPtrTy Sema::ActOnPropertyImplD ObjCInterfaceDecl *ClassDeclared; Ivar = IDecl->lookupInstanceVariable(Context, PropertyIvar, ClassDeclared); if (!Ivar) { - Ivar = ObjCIvarDecl::Create(Context, CurContext, PropertyLoc, + DeclContext *EnclosingContext = cast_or_null(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; Modified: vendor/clang/dist/test/CodeGen/builtins-x86.c ============================================================================== --- vendor/clang/dist/test/CodeGen/builtins-x86.c Sun Jun 7 09:21:09 2009 (r193630) +++ vendor/clang/dist/test/CodeGen/builtins-x86.c Sun Jun 7 09:21:25 2009 (r193631) @@ -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); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***