Yes, mangled names for vector versions are added as attributes to the 
original function.

Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team

12.05.2016 6:00, Hal Finkel пишет:
> Hi Alexey,
>
> As I recall, Xinmin's RFC discussed encoding the various possible manglings 
> for vector functions in some attribute. Is that what this does? It is 
> difficult to tell from the test case what's actually happing here.
>
>   -Hal
>
> ----- Original Message -----
>> From: "Alexey Bataev" <a.bat...@hotmail.com>
>> To: "Hal Finkel" <hfin...@anl.gov>
>> Cc: cfe-commits@lists.llvm.org
>> Sent: Wednesday, May 11, 2016 9:38:27 PM
>> Subject: Re: r268721 - [OPENMP 4.0] Codegen for 'declare simd' directive.
>>
>> Hal,
>>
>> According to Xinmin's RFC the codegen for 'declare simd' in clang
>> includes only generation of special (Vector ABI) mangled names for
>> future vectorized versions of elemental functions. Actual vector
>> versions must be generated by a backend. Xinmin and his team are
>> working
>> on this.
>>
>> The mangling part was accepted by David Majnemer (that's why I had to
>> implement it in clang), but RFC for a backend pass for generation of
>> vector functions is still under review, I think
>>
>> Best regards,
>> Alexey Bataev
>> =============
>> Software Engineer
>> Intel Compiler Team
>>
>> 11.05.2016 20:46, Hal Finkel пишет:
>>> Hi Alexey,
>>>
>>> I'm a bit confused regarding what this patch does, in part because
>>> the test case does not test any of the function argument or return
>>> types. Does it generate these "simd" functions taking scalar
>>> arguments? I'd expect that what this does is that it generates
>>> functions taking vector arguments and producing vector results. It
>>> would then extract the scalar values from those arguments and feed
>>> them into the scalar code (replicated N times), and then insert
>>> the results into the vector return value. The SLP vectorizer will
>>> then vectorize the function if profitable.
>>>
>>> Thanks again,
>>> Hal
>>>
>>> ----- Original Message -----
>>>> From: "Alexey Bataev via cfe-commits" <cfe-commits@lists.llvm.org>
>>>> To: cfe-commits@lists.llvm.org
>>>> Sent: Friday, May 6, 2016 4:40:08 AM
>>>> Subject: r268721 - [OPENMP 4.0] Codegen for 'declare simd'
>>>> directive.
>>>>
>>>> Author: abataev
>>>> Date: Fri May  6 04:40:08 2016
>>>> New Revision: 268721
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=268721&view=rev
>>>> Log:
>>>> [OPENMP 4.0] Codegen for 'declare simd' directive.
>>>>
>>>> OpenMP 4.0 adds support for elemental functions using declarative
>>>> directive '#pragma omp declare simd'. Patch adds mangling for simd
>>>> functions in accordance with
>>>> https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt
>>>>
>>>> Added:
>>>>       cfe/trunk/test/OpenMP/declare_simd_codegen.cpp
>>>> Modified:
>>>>       cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
>>>>       cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h
>>>>       cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
>>>>
>>>> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp?rev=268721&r1=268720&r2=268721&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (original)
>>>> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp Fri May  6 04:40:08
>>>> 2016
>>>> @@ -6042,3 +6042,228 @@ void CGOpenMPRuntime::emitTargetEnterOrE
>>>>        ThenGenRCG(CGF);
>>>>      }
>>>>    }
>>>> +
>>>> +namespace {
>>>> +  /// Kind of parameter in a function with 'declare simd'
>>>> directive.
>>>> +  enum ParamKindTy { LinearWithVarStride, Linear, Uniform, Vector
>>>> };
>>>> +  /// Attribute set of the parameter.
>>>> +  struct ParamAttrTy {
>>>> +    ParamKindTy Kind = Vector;
>>>> +    llvm::APSInt StrideOrArg;
>>>> +    llvm::APSInt Alignment;
>>>> +  };
>>>> +} // namespace
>>>> +
>>>> +static unsigned evaluateCDTSize(const FunctionDecl *FD,
>>>> +                                ArrayRef<ParamAttrTy> ParamAttrs)
>>>> {
>>>> +  // Every vector variant of a SIMD-enabled function has a vector
>>>> length (VLEN).
>>>> +  // If OpenMP clause "simdlen" is used, the VLEN is the value of
>>>> the argument
>>>> +  // of that clause. The VLEN value must be power of 2.
>>>> +  // In other case the notion of the function`s "characteristic
>>>> data
>>>> type" (CDT)
>>>> +  // is used to compute the vector length.
>>>> +  // CDT is defined in the following order:
>>>> +  //   a) For non-void function, the CDT is the return type.
>>>> +  //   b) If the function has any non-uniform, non-linear
>>>> parameters, then the
>>>> +  //   CDT is the type of the first such parameter.
>>>> +  //   c) If the CDT determined by a) or b) above is struct,
>>>> union,
>>>> or class
>>>> +  //   type which is pass-by-value (except for the type that maps
>>>> to
>>>> the
>>>> +  //   built-in complex data type), the characteristic data type
>>>> is
>>>> int.
>>>> +  //   d) If none of the above three cases is applicable, the CDT
>>>> is
>>>> int.
>>>> +  // The VLEN is then determined based on the CDT and the size of
>>>> vector
>>>> +  // register of that ISA for which current vector version is
>>>> generated. The
>>>> +  // VLEN is computed using the formula below:
>>>> +  //   VLEN  = sizeof(vector_register) / sizeof(CDT),
>>>> +  // where vector register size specified in section 3.2.1
>>>> Registers
>>>> and the
>>>> +  // Stack Frame of original AMD64 ABI document.
>>>> +  QualType RetType = FD->getReturnType();
>>>> +  if (RetType.isNull())
>>>> +    return 0;
>>>> +  ASTContext &C = FD->getASTContext();
>>>> +  QualType CDT;
>>>> +  if (!RetType.isNull() && !RetType->isVoidType())
>>>> +    CDT = RetType;
>>>> +  else {
>>>> +    unsigned Offset = 0;
>>>> +    if (auto *MD = dyn_cast<CXXMethodDecl>(FD)) {
>>>> +      if (ParamAttrs[Offset].Kind == Vector)
>>>> +        CDT = C.getPointerType(C.getRecordType(MD->getParent()));
>>>> +      ++Offset;
>>>> +    }
>>>> +    if (CDT.isNull()) {
>>>> +      for (unsigned I = 0, E = FD->getNumParams(); I < E; ++I) {
>>>> +        if (ParamAttrs[I + Offset].Kind == Vector) {
>>>> +          CDT = FD->getParamDecl(I)->getType();
>>>> +          break;
>>>> +        }
>>>> +      }
>>>> +    }
>>>> +  }
>>>> +  if (CDT.isNull())
>>>> +    CDT = C.IntTy;
>>>> +  CDT = CDT->getCanonicalTypeUnqualified();
>>>> +  if (CDT->isRecordType() || CDT->isUnionType())
>>>> +    CDT = C.IntTy;
>>>> +  return C.getTypeSize(CDT);
>>>> +}
>>>> +
>>>> +static void
>>>> +emitX86DeclareSimdFunction(const FunctionDecl *FD, llvm::Function
>>>> *Fn,
>>>> +                           llvm::APSInt VLENVal,
>>>> +                           ArrayRef<ParamAttrTy> ParamAttrs,
>>>> +                           OMPDeclareSimdDeclAttr::BranchStateTy
>>>> State) {
>>>> +  struct ISADataTy {
>>>> +    char ISA;
>>>> +    unsigned VecRegSize;
>>>> +  };
>>>> +  ISADataTy ISAData[] = {
>>>> +      {
>>>> +          'b', 128
>>>> +      }, // SSE
>>>> +      {
>>>> +          'c', 256
>>>> +      }, // AVX
>>>> +      {
>>>> +          'd', 256
>>>> +      }, // AVX2
>>>> +      {
>>>> +          'e', 512
>>>> +      }, // AVX512
>>>> +  };
>>>> +  llvm::SmallVector<char, 2> Masked;
>>>> +  switch (State) {
>>>> +  case OMPDeclareSimdDeclAttr::BS_Undefined:
>>>> +    Masked.push_back('N');
>>>> +    Masked.push_back('M');
>>>> +    break;
>>>> +  case OMPDeclareSimdDeclAttr::BS_Notinbranch:
>>>> +    Masked.push_back('N');
>>>> +    break;
>>>> +  case OMPDeclareSimdDeclAttr::BS_Inbranch:
>>>> +    Masked.push_back('M');
>>>> +    break;
>>>> +  }
>>>> +  for (auto Mask : Masked) {
>>>> +    for (auto &Data : ISAData) {
>>>> +      SmallString<256> Buffer;
>>>> +      llvm::raw_svector_ostream Out(Buffer);
>>>> +      Out << "_ZGV" << Data.ISA << Mask;
>>>> +      if (!VLENVal) {
>>>> +        Out << llvm::APSInt::getUnsigned(Data.VecRegSize /
>>>> +                                         evaluateCDTSize(FD,
>>>> ParamAttrs));
>>>> +      } else
>>>> +        Out << VLENVal;
>>>> +      for (auto &ParamAttr : ParamAttrs) {
>>>> +        switch (ParamAttr.Kind){
>>>> +        case LinearWithVarStride:
>>>> +          Out << 's' << ParamAttr.StrideOrArg;
>>>> +          break;
>>>> +        case Linear:
>>>> +          Out << 'l';
>>>> +          if (!!ParamAttr.StrideOrArg)
>>>> +            Out << ParamAttr.StrideOrArg;
>>>> +          break;
>>>> +        case Uniform:
>>>> +          Out << 'u';
>>>> +          break;
>>>> +        case Vector:
>>>> +          Out << 'v';
>>>> +          break;
>>>> +        }
>>>> +        if (!!ParamAttr.Alignment)
>>>> +          Out << 'a' << ParamAttr.Alignment;
>>>> +      }
>>>> +      Out << '_' << Fn->getName();
>>>> +      Fn->addFnAttr(Out.str());
>>>> +    }
>>>> +  }
>>>> +}
>>>> +
>>>> +void CGOpenMPRuntime::emitDeclareSimdFunction(const FunctionDecl
>>>> *FD,
>>>> +                                              llvm::Function *Fn)
>>>> {
>>>> +  ASTContext &C = CGM.getContext();
>>>> +  FD = FD->getCanonicalDecl();
>>>> +  // Map params to their positions in function decl.
>>>> +  llvm::DenseMap<const Decl *, unsigned> ParamPositions;
>>>> +  if (isa<CXXMethodDecl>(FD))
>>>> +    ParamPositions.insert({FD, 0});
>>>> +  unsigned ParamPos = ParamPositions.size();
>>>> +  for (auto *P : FD->params()) {
>>>> +    ParamPositions.insert({P->getCanonicalDecl(), ParamPos});
>>>> +    ++ParamPos;
>>>> +  }
>>>> +  for (auto *Attr : FD->specific_attrs<OMPDeclareSimdDeclAttr>())
>>>> {
>>>> +    llvm::SmallVector<ParamAttrTy, 8>
>>>> ParamAttrs(ParamPositions.size());
>>>> +    // Mark uniform parameters.
>>>> +    for (auto *E : Attr->uniforms()) {
>>>> +      E = E->IgnoreParenImpCasts();
>>>> +      unsigned Pos;
>>>> +      if (isa<CXXThisExpr>(E))
>>>> +        Pos = ParamPositions[FD];
>>>> +      else {
>>>> +        auto *PVD =
>>>> cast<ParmVarDecl>(cast<DeclRefExpr>(E)->getDecl())
>>>> +                        ->getCanonicalDecl();
>>>> +        Pos = ParamPositions[PVD];
>>>> +      }
>>>> +      ParamAttrs[Pos].Kind = Uniform;
>>>> +    }
>>>> +    // Get alignment info.
>>>> +    auto NI = Attr->alignments_begin();
>>>> +    for (auto *E : Attr->aligneds()) {
>>>> +      E = E->IgnoreParenImpCasts();
>>>> +      unsigned Pos;
>>>> +      QualType ParmTy;
>>>> +      if (isa<CXXThisExpr>(E)) {
>>>> +        Pos = ParamPositions[FD];
>>>> +        ParmTy = E->getType();
>>>> +      } else {
>>>> +        auto *PVD =
>>>> cast<ParmVarDecl>(cast<DeclRefExpr>(E)->getDecl())
>>>> +                        ->getCanonicalDecl();
>>>> +        Pos = ParamPositions[PVD];
>>>> +        ParmTy = PVD->getType();
>>>> +      }
>>>> +      ParamAttrs[Pos].Alignment =
>>>> +          (*NI) ? (*NI)->EvaluateKnownConstInt(C)
>>>> +                : llvm::APSInt::getUnsigned(
>>>> +
>>>>                        
>>>> C.toCharUnitsFromBits(C.getOpenMPDefaultSimdAlign(ParmTy))
>>>> +                          .getQuantity());
>>>> +      ++NI;
>>>> +    }
>>>> +    // Mark linear parameters.
>>>> +    auto SI = Attr->steps_begin();
>>>> +    auto MI = Attr->modifiers_begin();
>>>> +    for (auto *E : Attr->linears()) {
>>>> +      E = E->IgnoreParenImpCasts();
>>>> +      unsigned Pos;
>>>> +      if (isa<CXXThisExpr>(E))
>>>> +        Pos = ParamPositions[FD];
>>>> +      else {
>>>> +        auto *PVD =
>>>> cast<ParmVarDecl>(cast<DeclRefExpr>(E)->getDecl())
>>>> +                        ->getCanonicalDecl();
>>>> +        Pos = ParamPositions[PVD];
>>>> +      }
>>>> +      auto &ParamAttr = ParamAttrs[Pos];
>>>> +      ParamAttr.Kind = Linear;
>>>> +      if (*SI) {
>>>> +        if (!(*SI)->EvaluateAsInt(ParamAttr.StrideOrArg, C,
>>>> +                                  Expr::SE_AllowSideEffects)) {
>>>> +          if (auto *DRE =
>>>> cast<DeclRefExpr>((*SI)->IgnoreParenImpCasts())) {
>>>> +            if (auto *StridePVD =
>>>> cast<ParmVarDecl>(DRE->getDecl()))
>>>> {
>>>> +              ParamAttr.Kind = LinearWithVarStride;
>>>> +              ParamAttr.StrideOrArg = llvm::APSInt::getUnsigned(
>>>> +                  ParamPositions[StridePVD->getCanonicalDecl()]);
>>>> +            }
>>>> +          }
>>>> +        }
>>>> +      }
>>>> +      ++SI;
>>>> +      ++MI;
>>>> +    }
>>>> +    llvm::APSInt VLENVal;
>>>> +    if (const Expr *VLEN = Attr->getSimdlen())
>>>> +      VLENVal = VLEN->EvaluateKnownConstInt(C);
>>>> +    OMPDeclareSimdDeclAttr::BranchStateTy State =
>>>> Attr->getBranchState();
>>>> +    if (CGM.getTriple().getArch() == llvm::Triple::x86 ||
>>>> +        CGM.getTriple().getArch() == llvm::Triple::x86_64)
>>>> +      emitX86DeclareSimdFunction(FD, Fn, VLENVal, ParamAttrs,
>>>> State);
>>>> +  }
>>>> +}
>>>>
>>>> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h?rev=268721&r1=268720&r2=268721&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h (original)
>>>> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h Fri May  6 04:40:08
>>>> 2016
>>>> @@ -1013,6 +1013,13 @@ public:
>>>>                                                 const
>>>>                                                 OMPExecutableDirective
>>>>                                                 &D,
>>>>                                                 const Expr *IfCond,
>>>>                                                 const Expr
>>>>                                                 *Device);
>>>> +
>>>> +  /// Marks function \a Fn with properly mangled versions of
>>>> vector
>>>> functions.
>>>> +  /// \param FD Function marked as 'declare simd'.
>>>> +  /// \param Fn LLVM function that must be marked with 'declare
>>>> simd'
>>>> +  /// attributes.
>>>> +  virtual void emitDeclareSimdFunction(const FunctionDecl *FD,
>>>> +                                       llvm::Function *Fn);
>>>>    };
>>>>    
>>>>    } // namespace CodeGen
>>>>
>>>> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=268721&r1=268720&r2=268721&view=diff
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
>>>> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Fri May  6 04:40:08
>>>> 2016
>>>> @@ -710,6 +710,8 @@ void CodeGenFunction::StartFunction(Glob
>>>>            }
>>>>        } else if (!FD->hasAttr<AlwaysInlineAttr>())
>>>>          Fn->addFnAttr(llvm::Attribute::NoInline);
>>>> +    if (CGM.getLangOpts().OpenMP &&
>>>> FD->hasAttr<OMPDeclareSimdDeclAttr>())
>>>> +      CGM.getOpenMPRuntime().emitDeclareSimdFunction(FD, Fn);
>>>>      }
>>>>    
>>>>      // Add no-jump-tables value.
>>>>
>>>> Added: cfe/trunk/test/OpenMP/declare_simd_codegen.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/declare_simd_codegen.cpp?rev=268721&view=auto
>>>> ==============================================================================
>>>> --- cfe/trunk/test/OpenMP/declare_simd_codegen.cpp (added)
>>>> +++ cfe/trunk/test/OpenMP/declare_simd_codegen.cpp Fri May  6
>>>> 04:40:08 2016
>>>> @@ -0,0 +1,288 @@
>>>> +// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp
>>>> -x
>>>> c++ -emit-llvm %s -o - -femit-all-decls | FileCheck %s
>>>> +// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-apple-darwin10
>>>> -emit-pch -o %t %s
>>>> +// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-apple-darwin10
>>>> -include-pch %t -verify %s -emit-llvm -o - -femit-all-decls |
>>>> FileCheck %s
>>>> +// expected-no-diagnostics
>>>> +// REQUIRES: x86-registered-target
>>>> +#ifndef HEADER
>>>> +#define HEADER
>>>> +
>>>> +#pragma omp declare simd linear(d : 8)
>>>> +#pragma omp declare simd inbranch simdlen(32)
>>>> +#pragma omp declare simd notinbranch
>>>> +void add_1(float *d) {}
>>>> +
>>>> +#pragma omp declare simd aligned(hp, hp2)
>>>> +template <class C>
>>>> +void h(C *hp, C *hp2, C *hq, C *lin) {
>>>> +}
>>>> +
>>>> +// Explicit specialization with <C=int>.
>>>> +// Pragmas need to be same, otherwise standard says that's
>>>> undefined
>>>> behavior.
>>>> +#pragma omp declare simd aligned(hp, hp2)
>>>> +template <>
>>>> +void h(int *hp, int *hp2, int *hq, int *lin) {
>>>> +  // Implicit specialization with <C=float>.
>>>> +  // This is special case where the directive is stored by Sema
>>>> and
>>>> is
>>>> +  // generated together with the (pending) function instatiation.
>>>> +  h((float *)hp, (float *)hp2, (float *)hq, (float *)lin);
>>>> +}
>>>> +
>>>> +class VV {
>>>> +public:
>>>> +#pragma omp declare simd uniform(this, a) linear(val(b) : a)
>>>> +  int add(int a, int b) __attribute__((cold)) { return a + b; }
>>>> +
>>>> +#pragma omp declare simd aligned(b : 4) aligned(a) linear(ref(b)
>>>> :
>>>> 4) linear(this, a)
>>>> +  float taddpf(float *a, float *&b) { return *a + *b; }
>>>> +
>>>> +#pragma omp declare simd linear(uval(c) : 8)
>>>> +#pragma omp declare simd aligned(b : 8)
>>>> +  int tadd(int (&b)[], int &c) { return x[b[0]] + b[0]; }
>>>> +
>>>> +private:
>>>> +  int x[10];
>>>> +} vv;
>>>> +
>>>> +template <int X, typename T>
>>>> +class TVV {
>>>> +public:
>>>> +#pragma omp declare simd simdlen(X)
>>>> +  int tadd(int a, int b) { return a + b; }
>>>> +
>>>> +#pragma omp declare simd aligned(a : X * 2) aligned(b)
>>>> linear(ref(b)
>>>> : X)
>>>> +  float taddpf(float *a, T *&b) { return *a + *b; }
>>>> +
>>>> +#pragma omp declare simd
>>>> +#pragma omp declare simd uniform(this, b)
>>>> +  int tadd(int b) { return x[b] + b; }
>>>> +
>>>> +private:
>>>> +  int x[X];
>>>> +};
>>>> +
>>>> +#pragma omp declare simd simdlen(N) aligned(b : N * 2)
>>>> linear(uval(c) : N)
>>>> +template <int N>
>>>> +void foo(int (&b)[N], float *&c) {}
>>>> +
>>>> +TVV<16, float> t16;
>>>> +
>>>> +void f(int (&g)[]) {
>>>> +  float a = 1.0f, b = 2.0f;
>>>> +  float *p = &b;
>>>> +  float r = t16.taddpf(&a, p);
>>>> +  int res = t16.tadd(b);
>>>> +  int c[64];
>>>> +  vv.add(res, res);
>>>> +  vv.taddpf(p, p);
>>>> +  vv.tadd(g, res);
>>>> +  foo(c, p);
>>>> +}
>>>> +
>>>> +#pragma omp declare simd
>>>> +#pragma omp declare simd notinbranch aligned(a : 32)
>>>> +int bar(VV v, float *a) { return 0; }
>>>> +#pragma omp declare simd
>>>> +#pragma omp declare simd notinbranch aligned(a)
>>>> +float baz(VV v, int a[]) { return 0; }
>>>> +#pragma omp declare simd
>>>> +#pragma omp declare simd notinbranch aligned(a)
>>>> +double bay(VV v, double *&a) { return 0; }
>>>> +#pragma omp declare simd
>>>> +#pragma omp declare simd inbranch linear(a : b) uniform(v, b)
>>>> +void bax(VV v, double *a, int b) {}
>>>> +#pragma omp declare simd uniform(q) aligned(q : 16) linear(k : 1)
>>>> +float foo(float *q, float x, int k) { return 0; }
>>>> +#pragma omp declare simd notinbranch
>>>> +double foo(double x) { return 0; }
>>>> +
>>>> +// CHECK-DAG: define {{.+}}@_Z5add_1Pf(
>>>> +// CHECK-DAG: define {{.+}}@_Z1hIiEvPT_S1_S1_S1_(
>>>> +// CHECK-DAG: define {{.+}}@_Z1hIfEvPT_S1_S1_S1_(
>>>> +// CHECK-DAG: define {{.+}}@_ZN2VV3addEii(
>>>> +// CHECK-DAG: define {{.+}}@_ZN2VV6taddpfEPfRS0_(
>>>> +// CHECK-DAG: define {{.+}}@_ZN2VV4taddERA_iRi(
>>>> +// CHECK-DAG: define {{.+}}@_Z1fRA_i(
>>>> +// CHECK-DAG: define {{.+}}@_ZN3TVVILi16EfE6taddpfEPfRS1_(
>>>> +// CHECK-DAG: define {{.+}}@_ZN3TVVILi16EfE4taddEi(
>>>> +// CHECK-DAG: define {{.+}}@_Z3fooILi64EEvRAT__iRPf(
>>>> +// CHECK-DAG: define {{.+}}@_Z3bar2VVPf(
>>>> +// CHECK-DAG: define {{.+}}@_Z3baz2VVPi(
>>>> +// CHECK-DAG: define {{.+}}@_Z3bay2VVRPd(
>>>> +// CHECK-DAG: define {{.+}}@_Z3bax2VVPdi(
>>>> +// CHECK-DAG: define {{.+}}@_Z3fooPffi(
>>>> +// CHECK-DAG: define {{.+}}@_Z3food(
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4l8__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVbN4l8__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVcM8l8__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVcN8l8__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVdM8l8__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVdN8l8__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVeM16l8__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVeN16l8__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVbM32v__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVcM32v__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVdM32v__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVeM32v__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVbN2v__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVcN4v__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVdN4v__Z5add_1Pf"
>>>> +// CHECK-DAG: "_ZGVeN8v__Z5add_1Pf"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM2va16va16vv__Z1hIiEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVbN2va16va16vv__Z1hIiEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVcM4va16va16vv__Z1hIiEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVcN4va16va16vv__Z1hIiEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVdM4va16va16vv__Z1hIiEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVdN4va16va16vv__Z1hIiEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVeM8va16va16vv__Z1hIiEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVeN8va16va16vv__Z1hIiEvPT_S1_S1_S1_"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM2va16va16vv__Z1hIfEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVbN2va16va16vv__Z1hIfEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVcM4va16va16vv__Z1hIfEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVcN4va16va16vv__Z1hIfEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVdM4va16va16vv__Z1hIfEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVdN4va16va16vv__Z1hIfEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVeM8va16va16vv__Z1hIfEvPT_S1_S1_S1_"
>>>> +// CHECK-DAG: "_ZGVeN8va16va16vv__Z1hIfEvPT_S1_S1_S1_"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4uus1__ZN2VV3addEii"
>>>> +// CHECK-DAG: "_ZGVbN4uus1__ZN2VV3addEii"
>>>> +// CHECK-DAG: "_ZGVcM8uus1__ZN2VV3addEii"
>>>> +// CHECK-DAG: "_ZGVcN8uus1__ZN2VV3addEii"
>>>> +// CHECK-DAG: "_ZGVdM8uus1__ZN2VV3addEii"
>>>> +// CHECK-DAG: "_ZGVdN8uus1__ZN2VV3addEii"
>>>> +// CHECK-DAG: "_ZGVeM16uus1__ZN2VV3addEii"
>>>> +// CHECK-DAG: "_ZGVeN16uus1__ZN2VV3addEii"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4lla16l4a4__ZN2VV6taddpfEPfRS0_"
>>>> +// CHECK-DAG: "_ZGVbN4lla16l4a4__ZN2VV6taddpfEPfRS0_"
>>>> +// CHECK-DAG: "_ZGVcM8lla16l4a4__ZN2VV6taddpfEPfRS0_"
>>>> +// CHECK-DAG: "_ZGVcN8lla16l4a4__ZN2VV6taddpfEPfRS0_"
>>>> +// CHECK-DAG: "_ZGVdM8lla16l4a4__ZN2VV6taddpfEPfRS0_"
>>>> +// CHECK-DAG: "_ZGVdN8lla16l4a4__ZN2VV6taddpfEPfRS0_"
>>>> +// CHECK-DAG: "_ZGVeM16lla16l4a4__ZN2VV6taddpfEPfRS0_"
>>>> +// CHECK-DAG: "_ZGVeN16lla16l4a4__ZN2VV6taddpfEPfRS0_"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4vvl8__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVbN4vvl8__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVcM8vvl8__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVcN8vvl8__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVdM8vvl8__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVdN8vvl8__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVeM16vvl8__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVeN16vvl8__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVbM4vva8v__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVbN4vva8v__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVcM8vva8v__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVcN8vva8v__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVdM8vva8v__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVdN8vva8v__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVeM16vva8v__ZN2VV4taddERA_iRi"
>>>> +// CHECK-DAG: "_ZGVeN16vva8v__ZN2VV4taddERA_iRi"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4vva32l16a16__ZN3TVVILi16EfE6taddpfEPfRS1_"
>>>> +// CHECK-DAG: "_ZGVbN4vva32l16a16__ZN3TVVILi16EfE6taddpfEPfRS1_"
>>>> +// CHECK-DAG: "_ZGVcM8vva32l16a16__ZN3TVVILi16EfE6taddpfEPfRS1_"
>>>> +// CHECK-DAG: "_ZGVcN8vva32l16a16__ZN3TVVILi16EfE6taddpfEPfRS1_"
>>>> +// CHECK-DAG: "_ZGVdM8vva32l16a16__ZN3TVVILi16EfE6taddpfEPfRS1_"
>>>> +// CHECK-DAG: "_ZGVdN8vva32l16a16__ZN3TVVILi16EfE6taddpfEPfRS1_"
>>>> +// CHECK-DAG: "_ZGVeM16vva32l16a16__ZN3TVVILi16EfE6taddpfEPfRS1_"
>>>> +// CHECK-DAG: "_ZGVeN16vva32l16a16__ZN3TVVILi16EfE6taddpfEPfRS1_"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4uu__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVbN4uu__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVcM8uu__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVcN8uu__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVdM8uu__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVdN8uu__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVeM16uu__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVeN16uu__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVbM4vv__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVbN4vv__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVcM8vv__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVcN8vv__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVdM8vv__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVdN8vv__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVeM16vv__ZN3TVVILi16EfE4taddEi"
>>>> +// CHECK-DAG: "_ZGVeN16vv__ZN3TVVILi16EfE4taddEi"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM64va128l64__Z3fooILi64EEvRAT__iRPf"
>>>> +// CHECK-DAG: "_ZGVbN64va128l64__Z3fooILi64EEvRAT__iRPf"
>>>> +// CHECK-DAG: "_ZGVcM64va128l64__Z3fooILi64EEvRAT__iRPf"
>>>> +// CHECK-DAG: "_ZGVcN64va128l64__Z3fooILi64EEvRAT__iRPf"
>>>> +// CHECK-DAG: "_ZGVdM64va128l64__Z3fooILi64EEvRAT__iRPf"
>>>> +// CHECK-DAG: "_ZGVdN64va128l64__Z3fooILi64EEvRAT__iRPf"
>>>> +// CHECK-DAG: "_ZGVeM64va128l64__Z3fooILi64EEvRAT__iRPf"
>>>> +// CHECK-DAG: "_ZGVeN64va128l64__Z3fooILi64EEvRAT__iRPf"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4vv__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVbN4vv__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVcM8vv__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVcN8vv__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVdM8vv__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVdN8vv__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVeM16vv__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVeN16vv__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVbN4vva32__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVcN8vva32__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVdN8vva32__Z3bar2VVPf"
>>>> +// CHECK-DAG: "_ZGVeN16vva32__Z3bar2VVPf"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4vv__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVbN4vv__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVcM8vv__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVcN8vv__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVdM8vv__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVdN8vv__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVeM16vv__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVeN16vv__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVbN4vva16__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVcN8vva16__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVdN8vva16__Z3baz2VVPi"
>>>> +// CHECK-DAG: "_ZGVeN16vva16__Z3baz2VVPi"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM2vv__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVbN2vv__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVcM4vv__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVcN4vv__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVdM4vv__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVdN4vv__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVeM8vv__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVeN8vv__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVbN2vva16__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVcN4vva16__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVdN4vva16__Z3bay2VVRPd"
>>>> +// CHECK-DAG: "_ZGVeN8vva16__Z3bay2VVRPd"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4us2u__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVcM8us2u__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVdM8us2u__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVeM16us2u__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVbM4vvv__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVbN4vvv__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVcM8vvv__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVcN8vvv__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVdM8vvv__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVdN8vvv__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVeM16vvv__Z3bax2VVPdi"
>>>> +// CHECK-DAG: "_ZGVeN16vvv__Z3bax2VVPdi"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbM4ua16vl1__Z3fooPffi"
>>>> +// CHECK-DAG: "_ZGVbN4ua16vl1__Z3fooPffi"
>>>> +// CHECK-DAG: "_ZGVcM8ua16vl1__Z3fooPffi"
>>>> +// CHECK-DAG: "_ZGVcN8ua16vl1__Z3fooPffi"
>>>> +// CHECK-DAG: "_ZGVdM8ua16vl1__Z3fooPffi"
>>>> +// CHECK-DAG: "_ZGVdN8ua16vl1__Z3fooPffi"
>>>> +// CHECK-DAG: "_ZGVeM16ua16vl1__Z3fooPffi"
>>>> +// CHECK-DAG: "_ZGVeN16ua16vl1__Z3fooPffi"
>>>> +
>>>> +// CHECK-DAG: "_ZGVbN2v__Z3food"
>>>> +// CHECK-DAG: "_ZGVcN4v__Z3food"
>>>> +// CHECK-DAG: "_ZGVdN4v__Z3food"
>>>> +// CHECK-DAG: "_ZGVeN8v__Z3food"
>>>> +
>>>> +// CHECK-NOT: "_ZGV{{.+}}__Z1fRA_i
>>>> +
>>>> +#endif
>>>>
>>>>
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits@lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>
>>

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to