Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 7 Jun 2009 09:21:25 +0000 (UTC)
From:      Ed Schouten <ed@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r193631 - in vendor/clang/dist: include/clang/AST lib/AST lib/CodeGen lib/Headers lib/Sema test/CodeGen test/Sema www
Message-ID:  <200906070921.n579LPmt088410@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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<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::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<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::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<llvm::IntegerType>(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<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;

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 ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906070921.n579LPmt088410>