Vendor import of clang release_70 branch r348011:
https://llvm.org/svn/llvm-project/cfe/branches/release_70@348011
This commit is contained in:
parent
ce9602e289
commit
6ae2bfad8a
@ -3364,7 +3364,7 @@ def IFuncDocs : Documentation {
|
||||
let Content = [{
|
||||
``__attribute__((ifunc("resolver")))`` is used to mark that the address of a declaration should be resolved at runtime by calling a resolver function.
|
||||
|
||||
The symbol name of the resolver function is given in quotes. A function with this name (after mangling) must be defined in the current translation unit; it may be ``static``. The resolver function should take no arguments and return a pointer.
|
||||
The symbol name of the resolver function is given in quotes. A function with this name (after mangling) must be defined in the current translation unit; it may be ``static``. The resolver function should return a pointer.
|
||||
|
||||
The ``ifunc`` attribute may only be used on a function declaration. A function declaration with an ``ifunc`` attribute is considered to be a definition of the declared entity. The entity must not have weak linkage; for example, in C++, it cannot be applied to a declaration if a definition at that location would be considered inline.
|
||||
|
||||
|
@ -238,7 +238,7 @@ def warn_option_invalid_ocl_version : Warning<
|
||||
"OpenCL version %0 does not support the option '%1'">, InGroup<Deprecated>;
|
||||
|
||||
def warn_stdlibcxx_not_found : Warning<
|
||||
"include path for stdlibc++ headers not found; pass '-std=libc++' on the "
|
||||
"include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the "
|
||||
"command line to use the libc++ standard library instead">,
|
||||
InGroup<DiagGroup<"stdlibcxx-not-found">>;
|
||||
}
|
||||
|
@ -2857,8 +2857,6 @@ def err_cyclic_alias : Error<
|
||||
"%select{alias|ifunc}0 definition is part of a cycle">;
|
||||
def err_ifunc_resolver_return : Error<
|
||||
"ifunc resolver function must return a pointer">;
|
||||
def err_ifunc_resolver_params : Error<
|
||||
"ifunc resolver function must have no parameters">;
|
||||
def warn_attribute_wrong_decl_type_str : Warning<
|
||||
"%0 attribute only applies to %1">, InGroup<IgnoredAttributes>;
|
||||
def err_attribute_wrong_decl_type_str : Error<
|
||||
|
@ -320,8 +320,6 @@ void CodeGenModule::checkAliases() {
|
||||
assert(FTy);
|
||||
if (!FTy->getReturnType()->isPointerTy())
|
||||
Diags.Report(Location, diag::err_ifunc_resolver_return);
|
||||
if (FTy->getNumParams())
|
||||
Diags.Report(Location, diag::err_ifunc_resolver_params);
|
||||
}
|
||||
|
||||
llvm::Constant *Aliasee = Alias->getIndirectSymbol();
|
||||
|
@ -553,6 +553,15 @@ struct CounterCoverageMappingBuilder
|
||||
completeDeferred(Count, DeferredEndLoc);
|
||||
}
|
||||
|
||||
size_t locationDepth(SourceLocation Loc) {
|
||||
size_t Depth = 0;
|
||||
while (Loc.isValid()) {
|
||||
Loc = getIncludeOrExpansionLoc(Loc);
|
||||
Depth++;
|
||||
}
|
||||
return Depth;
|
||||
}
|
||||
|
||||
/// Pop regions from the stack into the function's list of regions.
|
||||
///
|
||||
/// Adds all regions from \c ParentIndex to the top of the stack to the
|
||||
@ -567,19 +576,41 @@ struct CounterCoverageMappingBuilder
|
||||
SourceLocation EndLoc = Region.hasEndLoc()
|
||||
? Region.getEndLoc()
|
||||
: RegionStack[ParentIndex].getEndLoc();
|
||||
size_t StartDepth = locationDepth(StartLoc);
|
||||
size_t EndDepth = locationDepth(EndLoc);
|
||||
while (!SM.isWrittenInSameFile(StartLoc, EndLoc)) {
|
||||
// The region ends in a nested file or macro expansion. Create a
|
||||
// separate region for each expansion.
|
||||
SourceLocation NestedLoc = getStartOfFileOrMacro(EndLoc);
|
||||
assert(SM.isWrittenInSameFile(NestedLoc, EndLoc));
|
||||
bool UnnestStart = StartDepth >= EndDepth;
|
||||
bool UnnestEnd = EndDepth >= StartDepth;
|
||||
if (UnnestEnd) {
|
||||
// The region ends in a nested file or macro expansion. Create a
|
||||
// separate region for each expansion.
|
||||
SourceLocation NestedLoc = getStartOfFileOrMacro(EndLoc);
|
||||
assert(SM.isWrittenInSameFile(NestedLoc, EndLoc));
|
||||
|
||||
if (!isRegionAlreadyAdded(NestedLoc, EndLoc))
|
||||
SourceRegions.emplace_back(Region.getCounter(), NestedLoc, EndLoc);
|
||||
if (!isRegionAlreadyAdded(NestedLoc, EndLoc))
|
||||
SourceRegions.emplace_back(Region.getCounter(), NestedLoc, EndLoc);
|
||||
|
||||
EndLoc = getPreciseTokenLocEnd(getIncludeOrExpansionLoc(EndLoc));
|
||||
if (EndLoc.isInvalid())
|
||||
llvm::report_fatal_error("File exit not handled before popRegions");
|
||||
EndLoc = getPreciseTokenLocEnd(getIncludeOrExpansionLoc(EndLoc));
|
||||
if (EndLoc.isInvalid())
|
||||
llvm::report_fatal_error("File exit not handled before popRegions");
|
||||
EndDepth--;
|
||||
}
|
||||
if (UnnestStart) {
|
||||
// The region begins in a nested file or macro expansion. Create a
|
||||
// separate region for each expansion.
|
||||
SourceLocation NestedLoc = getEndOfFileOrMacro(StartLoc);
|
||||
assert(SM.isWrittenInSameFile(StartLoc, NestedLoc));
|
||||
|
||||
if (!isRegionAlreadyAdded(StartLoc, NestedLoc))
|
||||
SourceRegions.emplace_back(Region.getCounter(), StartLoc, NestedLoc);
|
||||
|
||||
StartLoc = getIncludeOrExpansionLoc(StartLoc);
|
||||
if (StartLoc.isInvalid())
|
||||
llvm::report_fatal_error("File exit not handled before popRegions");
|
||||
StartDepth--;
|
||||
}
|
||||
}
|
||||
Region.setStartLoc(StartLoc);
|
||||
Region.setEndLoc(EndLoc);
|
||||
|
||||
MostRecentLocation = EndLoc;
|
||||
|
@ -107,15 +107,19 @@ void ppc::getPPCTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
||||
if (FloatABI == ppc::FloatABI::Soft)
|
||||
Features.push_back("-hard-float");
|
||||
|
||||
ppc::ReadGOTPtrMode ReadGOT = ppc::getPPCReadGOTPtrMode(D, Args);
|
||||
ppc::ReadGOTPtrMode ReadGOT = ppc::getPPCReadGOTPtrMode(D, Triple, Args);
|
||||
if (ReadGOT == ppc::ReadGOTPtrMode::SecurePlt)
|
||||
Features.push_back("+secure-plt");
|
||||
}
|
||||
|
||||
ppc::ReadGOTPtrMode ppc::getPPCReadGOTPtrMode(const Driver &D, const ArgList &Args) {
|
||||
ppc::ReadGOTPtrMode ppc::getPPCReadGOTPtrMode(const Driver &D, const llvm::Triple &Triple,
|
||||
const ArgList &Args) {
|
||||
if (Args.getLastArg(options::OPT_msecure_plt))
|
||||
return ppc::ReadGOTPtrMode::SecurePlt;
|
||||
return ppc::ReadGOTPtrMode::Bss;
|
||||
if (Triple.isOSOpenBSD())
|
||||
return ppc::ReadGOTPtrMode::SecurePlt;
|
||||
else
|
||||
return ppc::ReadGOTPtrMode::Bss;
|
||||
}
|
||||
|
||||
ppc::FloatABI ppc::getPPCFloatABI(const Driver &D, const ArgList &Args) {
|
||||
|
@ -38,7 +38,7 @@ FloatABI getPPCFloatABI(const Driver &D, const llvm::opt::ArgList &Args);
|
||||
|
||||
std::string getPPCTargetCPU(const llvm::opt::ArgList &Args);
|
||||
const char *getPPCAsmModeForCPU(StringRef Name);
|
||||
ReadGOTPtrMode getPPCReadGOTPtrMode(const Driver &D,
|
||||
ReadGOTPtrMode getPPCReadGOTPtrMode(const Driver &D, const llvm::Triple &Triple,
|
||||
const llvm::opt::ArgList &Args);
|
||||
|
||||
void getPPCTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
||||
|
@ -16353,67 +16353,82 @@ vec_revb(vector unsigned __int128 __a) {
|
||||
|
||||
/* vec_xl */
|
||||
|
||||
typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
|
||||
typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
|
||||
typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
|
||||
typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
|
||||
typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
|
||||
typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
|
||||
typedef vector float unaligned_vec_float __attribute__((aligned(1)));
|
||||
|
||||
static inline __ATTRS_o_ai vector signed char vec_xl(signed long long __offset,
|
||||
signed char *__ptr) {
|
||||
return *(vector signed char *)(__ptr + __offset);
|
||||
return *(unaligned_vec_schar *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned char
|
||||
vec_xl(signed long long __offset, unsigned char *__ptr) {
|
||||
return *(vector unsigned char *)(__ptr + __offset);
|
||||
return *(unaligned_vec_uchar*)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector signed short vec_xl(signed long long __offset,
|
||||
signed short *__ptr) {
|
||||
return *(vector signed short *)(__ptr + __offset);
|
||||
return *(unaligned_vec_sshort *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned short
|
||||
vec_xl(signed long long __offset, unsigned short *__ptr) {
|
||||
return *(vector unsigned short *)(__ptr + __offset);
|
||||
return *(unaligned_vec_ushort *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector signed int vec_xl(signed long long __offset,
|
||||
signed int *__ptr) {
|
||||
return *(vector signed int *)(__ptr + __offset);
|
||||
return *(unaligned_vec_sint *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned int vec_xl(signed long long __offset,
|
||||
unsigned int *__ptr) {
|
||||
return *(vector unsigned int *)(__ptr + __offset);
|
||||
return *(unaligned_vec_uint *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector float vec_xl(signed long long __offset,
|
||||
float *__ptr) {
|
||||
return *(vector float *)(__ptr + __offset);
|
||||
return *(unaligned_vec_float *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
|
||||
typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
|
||||
typedef vector double unaligned_vec_double __attribute__((aligned(1)));
|
||||
|
||||
static inline __ATTRS_o_ai vector signed long long
|
||||
vec_xl(signed long long __offset, signed long long *__ptr) {
|
||||
return *(vector signed long long *)(__ptr + __offset);
|
||||
return *(unaligned_vec_sll *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned long long
|
||||
vec_xl(signed long long __offset, unsigned long long *__ptr) {
|
||||
return *(vector unsigned long long *)(__ptr + __offset);
|
||||
return *(unaligned_vec_ull *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector double vec_xl(signed long long __offset,
|
||||
double *__ptr) {
|
||||
return *(vector double *)(__ptr + __offset);
|
||||
return *(unaligned_vec_double *)(__ptr + __offset);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
|
||||
typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
|
||||
typedef vector unsigned __int128 unaligned_vec_ui128
|
||||
__attribute__((aligned(1)));
|
||||
static inline __ATTRS_o_ai vector signed __int128
|
||||
vec_xl(signed long long __offset, signed __int128 *__ptr) {
|
||||
return *(vector signed __int128 *)(__ptr + __offset);
|
||||
return *(unaligned_vec_si128 *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned __int128
|
||||
vec_xl(signed long long __offset, unsigned __int128 *__ptr) {
|
||||
return *(vector unsigned __int128 *)(__ptr + __offset);
|
||||
return *(unaligned_vec_ui128 *)(__ptr + __offset);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -16498,62 +16513,62 @@ vec_xl_be(signed long long __offset, unsigned __int128 *__ptr) {
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed char __vec,
|
||||
signed long long __offset,
|
||||
signed char *__ptr) {
|
||||
*(vector signed char *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_schar *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned char __vec,
|
||||
signed long long __offset,
|
||||
unsigned char *__ptr) {
|
||||
*(vector unsigned char *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed short __vec,
|
||||
signed long long __offset,
|
||||
signed short *__ptr) {
|
||||
*(vector signed short *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_sshort *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
|
||||
signed long long __offset,
|
||||
unsigned short *__ptr) {
|
||||
*(vector unsigned short *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_ushort *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
|
||||
signed long long __offset,
|
||||
signed int *__ptr) {
|
||||
*(vector signed int *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_sint *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned int __vec,
|
||||
signed long long __offset,
|
||||
unsigned int *__ptr) {
|
||||
*(vector unsigned int *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_uint *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector float __vec,
|
||||
signed long long __offset,
|
||||
float *__ptr) {
|
||||
*(vector float *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_float *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
|
||||
signed long long __offset,
|
||||
signed long long *__ptr) {
|
||||
*(vector signed long long *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_sll *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
|
||||
signed long long __offset,
|
||||
unsigned long long *__ptr) {
|
||||
*(vector unsigned long long *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_ull *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector double __vec,
|
||||
signed long long __offset,
|
||||
double *__ptr) {
|
||||
*(vector double *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_double *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -16561,13 +16576,13 @@ static inline __ATTRS_o_ai void vec_xst(vector double __vec,
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
|
||||
signed long long __offset,
|
||||
signed __int128 *__ptr) {
|
||||
*(vector signed __int128 *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_si128 *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
|
||||
signed long long __offset,
|
||||
unsigned __int128 *__ptr) {
|
||||
*(vector unsigned __int128 *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_ui128 *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -6092,7 +6092,10 @@ PerformConstructorInitialization(Sema &S,
|
||||
TypeSourceInfo *TSInfo = Entity.getTypeSourceInfo();
|
||||
if (!TSInfo)
|
||||
TSInfo = S.Context.getTrivialTypeSourceInfo(Entity.getType(), Loc);
|
||||
SourceRange ParenOrBraceRange = Kind.getParenOrBraceRange();
|
||||
SourceRange ParenOrBraceRange =
|
||||
(Kind.getKind() == InitializationKind::IK_DirectList)
|
||||
? SourceRange(LBraceLoc, RBraceLoc)
|
||||
: Kind.getParenOrBraceRange();
|
||||
|
||||
if (auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(
|
||||
Step.Function.FoundDecl.getDecl())) {
|
||||
|
@ -5022,13 +5022,16 @@ ASTFileSignature ASTWriter::WriteASTCore(Sema &SemaRef, StringRef isysroot,
|
||||
WriteFPPragmaOptions(SemaRef.getFPOptions());
|
||||
WriteOpenCLExtensions(SemaRef);
|
||||
WriteOpenCLExtensionTypes(SemaRef);
|
||||
WriteOpenCLExtensionDecls(SemaRef);
|
||||
WriteCUDAPragmas(SemaRef);
|
||||
|
||||
// If we're emitting a module, write out the submodule information.
|
||||
if (WritingModule)
|
||||
WriteSubmodules(WritingModule);
|
||||
|
||||
// We need to have information about submodules to correctly deserialize
|
||||
// decls from OpenCLExtensionDecls block
|
||||
WriteOpenCLExtensionDecls(SemaRef);
|
||||
|
||||
Stream.EmitRecord(SPECIAL_TYPES, SpecialTypes);
|
||||
|
||||
// Write the record containing external, unnamed definitions.
|
||||
|
@ -9338,32 +9338,32 @@ void test9() {
|
||||
// CHECK-LABEL: define void @test9
|
||||
// CHECK-LE-LABEL: define void @test9
|
||||
res_vsc = vec_xl(param_sll, ¶m_sc);
|
||||
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vuc = vec_xl(param_sll, ¶m_uc);
|
||||
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vs = vec_xl(param_sll, ¶m_s);
|
||||
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vus = vec_xl(param_sll, ¶m_us);
|
||||
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vi = vec_xl(param_sll, ¶m_i);
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vui = vec_xl(param_sll, ¶m_ui);
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vf = vec_xl(param_sll, ¶m_f);
|
||||
// CHECK: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 1
|
||||
}
|
||||
|
||||
/* ------------------------------ vec_xst ----------------------------------- */
|
||||
@ -9371,32 +9371,32 @@ void test10() {
|
||||
// CHECK-LABEL: define void @test10
|
||||
// CHECK-LE-LABEL: define void @test10
|
||||
vec_xst(vsc, param_sll, ¶m_sc);
|
||||
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vuc, param_sll, ¶m_uc);
|
||||
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vs, param_sll, ¶m_s);
|
||||
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vus, param_sll, ¶m_us);
|
||||
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vi, param_sll, ¶m_i);
|
||||
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vui, param_sll, ¶m_ui);
|
||||
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vf, param_sll, ¶m_f);
|
||||
// CHECK: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 1
|
||||
}
|
||||
|
||||
/* ----------------------------- vec_xl_be ---------------------------------- */
|
||||
@ -9404,35 +9404,35 @@ void test11() {
|
||||
// CHECK-LABEL: define void @test11
|
||||
// CHECK-LE-LABEL: define void @test11
|
||||
res_vsc = vec_xl_be(param_sll, ¶m_sc);
|
||||
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
|
||||
// CHECK-LE: shufflevector <16 x i8> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
|
||||
|
||||
res_vuc = vec_xl_be(param_sll, ¶m_uc);
|
||||
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
|
||||
// CHECK-LE: shufflevector <16 x i8> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
|
||||
|
||||
res_vs = vec_xl_be(param_sll, ¶m_s);
|
||||
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
|
||||
// CHECK-LE: shufflevector <8 x i16> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
|
||||
|
||||
res_vus = vec_xl_be(param_sll, ¶m_us);
|
||||
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
|
||||
// CHECK-LE: shufflevector <8 x i16> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
|
||||
|
||||
res_vi = vec_xl_be(param_sll, ¶m_i);
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.lxvw4x.be(i8* %{{[0-9]+}})
|
||||
|
||||
res_vui = vec_xl_be(param_sll, ¶m_ui);
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.lxvw4x.be(i8* %{{[0-9]+}})
|
||||
|
||||
res_vf = vec_xl_be(param_sll, ¶m_f);
|
||||
// CHECK: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.lxvw4x.be(i8* %{{[0-9]+}})
|
||||
}
|
||||
|
||||
@ -9441,34 +9441,34 @@ void test12() {
|
||||
// CHECK-LABEL: define void @test12
|
||||
// CHECK-LE-LABEL: define void @test12
|
||||
vec_xst_be(vsc, param_sll, ¶m_sc);
|
||||
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: shufflevector <16 x i8> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vuc, param_sll, ¶m_uc);
|
||||
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: shufflevector <16 x i8> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vs, param_sll, ¶m_s);
|
||||
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: shufflevector <8 x i16> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vus, param_sll, ¶m_us);
|
||||
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: shufflevector <8 x i16> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vi, param_sll, ¶m_i);
|
||||
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvw4x.be(<4 x i32> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vui, param_sll, ¶m_ui);
|
||||
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvw4x.be(<4 x i32> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vf, param_sll, ¶m_f);
|
||||
// CHECK: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvw4x.be(<4 x i32> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
}
|
||||
|
@ -205,45 +205,45 @@ void test1() {
|
||||
|
||||
/* vec_xl */
|
||||
res_vlll = vec_xl(param_sll, ¶m_lll);
|
||||
// CHECK: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-PPC: error: call to 'vec_xl' is ambiguous
|
||||
|
||||
res_vulll = vec_xl(param_sll, ¶m_ulll);
|
||||
// CHECK: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-PPC: error: call to 'vec_xl' is ambiguous
|
||||
|
||||
/* vec_xst */
|
||||
vec_xst(vlll, param_sll, ¶m_lll);
|
||||
// CHECK: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-PPC: error: call to 'vec_xst' is ambiguous
|
||||
|
||||
vec_xst(vulll, param_sll, ¶m_ulll);
|
||||
// CHECK: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-PPC: error: call to 'vec_xst' is ambiguous
|
||||
|
||||
/* vec_xl_be */
|
||||
res_vlll = vec_xl_be(param_sll, ¶m_lll);
|
||||
// CHECK: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-PPC: error: call to 'vec_xl' is ambiguous
|
||||
|
||||
res_vulll = vec_xl_be(param_sll, ¶m_ulll);
|
||||
// CHECK: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <1 x i128>, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-PPC: error: call to 'vec_xl' is ambiguous
|
||||
|
||||
/* vec_xst_be */
|
||||
vec_xst_be(vlll, param_sll, ¶m_lll);
|
||||
// CHECK: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-PPC: error: call to 'vec_xst' is ambiguous
|
||||
|
||||
vec_xst_be(vulll, param_sll, ¶m_ulll);
|
||||
// CHECK: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <1 x i128> %{{[0-9]+}}, <1 x i128>* %{{[0-9]+}}, align 1
|
||||
// CHECK-PPC: error: call to 'vec_xst' is ambiguous
|
||||
}
|
||||
|
@ -1637,51 +1637,51 @@ res_vsll = vec_slo(vsll, vsc);
|
||||
// CHECK-LE: @llvm.ppc.altivec.vsro
|
||||
|
||||
res_vsll = vec_xl(sll, asll);
|
||||
// CHECK: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vull = vec_xl(sll, aull);
|
||||
// CHECK: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vd = vec_xl(sll, ad);
|
||||
// CHECK: load <2 x double>, <2 x double>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: load <2 x double>, <2 x double>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <2 x double>, <2 x double>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: load <2 x double>, <2 x double>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vsll, sll, asll);
|
||||
// CHECK: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vull, sll, aull);
|
||||
// CHECK: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
|
||||
vec_xst(vd, sll, ad);
|
||||
// CHECK: store <2 x double> %{{[0-9]+}}, <2 x double>* %{{[0-9]+}}, align 16
|
||||
// CHECK-LE: store <2 x double> %{{[0-9]+}}, <2 x double>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <2 x double> %{{[0-9]+}}, <2 x double>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: store <2 x double> %{{[0-9]+}}, <2 x double>* %{{[0-9]+}}, align 1
|
||||
|
||||
res_vsll = vec_xl_be(sll, asll);
|
||||
// CHECK: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
|
||||
|
||||
res_vull = vec_xl_be(sll, aull);
|
||||
// CHECK: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <2 x i64>, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
|
||||
|
||||
res_vd = vec_xl_be(sll, ad);
|
||||
// CHECK: load <2 x double>, <2 x double>* %{{[0-9]+}}, align 16
|
||||
// CHECK: load <2 x double>, <2 x double>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vsll, sll, asll);
|
||||
// CHECK: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vull, sll, aull);
|
||||
// CHECK: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <2 x i64> %{{[0-9]+}}, <2 x i64>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
vec_xst_be(vd, sll, ad);
|
||||
// CHECK: store <2 x double> %{{[0-9]+}}, <2 x double>* %{{[0-9]+}}, align 16
|
||||
// CHECK: store <2 x double> %{{[0-9]+}}, <2 x double>* %{{[0-9]+}}, align 1
|
||||
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
|
||||
|
||||
res_vf = vec_neg(vf);
|
||||
|
@ -4,6 +4,7 @@
|
||||
#define MACRO_2 bar()
|
||||
#define MACRO_1 return; MACRO_2
|
||||
#define MACRO_3 MACRO_2
|
||||
#define GOTO goto
|
||||
|
||||
void bar() {}
|
||||
|
||||
@ -56,6 +57,15 @@ void func5() { // CHECK-NEXT: File 0, [[@LINE]]:14 -> [[@LINE+4]]:2 = #0
|
||||
// CHECK-NEXT: Expansion,File 1, 6:17 -> 6:24 = #1
|
||||
// CHECK-NEXT: File 2, 4:17 -> 4:22 = #1
|
||||
|
||||
// CHECK-NEXT: func6
|
||||
void func6(unsigned count) { // CHECK-NEXT: File 0, [[@LINE]]:28 -> [[@LINE+4]]:2 = #0
|
||||
begin: // CHECK-NEXT: File 0, [[@LINE]]:1 -> [[@LINE+3]]:2 = #1
|
||||
if (count--) // CHECK-NEXT: File 0, [[@LINE]]:9 -> [[@LINE]]:16 = #1
|
||||
GOTO begin; // CHECK-NEXT: File 0, [[@LINE]]:9 -> [[@LINE]]:19 = #2
|
||||
}
|
||||
// CHECK-NEXT: Expansion,File 0, [[@LINE-2]]:9 -> [[@LINE-2]]:13 = #2
|
||||
// CHECK-NEXT: File 1, 7:14 -> 7:18 = #2
|
||||
|
||||
int main(int argc, const char *argv[]) {
|
||||
func();
|
||||
func2();
|
||||
|
@ -112,3 +112,8 @@
|
||||
// RUN: | FileCheck -check-prefix=CHECK-ARM-FLOAT-ABI %s
|
||||
// CHECK-ARM-FLOAT-ABI-NOT: "-target-feature" "+soft-float"
|
||||
// CHECK-ARM-FLOAT-ABI: "-target-feature" "+soft-float-abi"
|
||||
|
||||
// Check PowerPC for Secure PLT
|
||||
// RUN: %clang -target powerpc-unknown-openbsd -### -c %s 2>&1 \
|
||||
// RUN: | FileCheck -check-prefix=CHECK-POWERPC-SECUREPLT %s
|
||||
// CHECK-POWERPC-SECUREPLT: "-target-feature" "+secure-plt"
|
||||
|
@ -1,5 +1,5 @@
|
||||
// RUN: %clang -cc1 -triple arm64-apple-ios6.0.0 -isysroot %S/doesnotexist %s 2>&1 | FileCheck %s
|
||||
// RUN: %clang -cc1 -triple arm64-apple-ios6.0.0 -isysroot %S/doesnotexist -stdlib=libc++ %s -verify
|
||||
// CHECK: include path for stdlibc++ headers not found; pass '-std=libc++' on the command line to use the libc++ standard library instead
|
||||
// CHECK: include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead
|
||||
|
||||
// expected-no-diagnostics
|
||||
|
@ -27,10 +27,6 @@ void f4_ifunc() {}
|
||||
void f4() __attribute__((ifunc("f4_ifunc")));
|
||||
//expected-error@-1 {{ifunc resolver function must return a pointer}}
|
||||
|
||||
void* f5_ifunc(int i) { return 0; }
|
||||
void f5() __attribute__((ifunc("f5_ifunc")));
|
||||
//expected-error@-1 {{ifunc resolver function must have no parameters}}
|
||||
|
||||
#else
|
||||
void f1a() __asm("f1");
|
||||
void f1a() {}
|
||||
|
@ -52,6 +52,13 @@ void construct() {
|
||||
// CHECK: CXXConstructExpr {{0x[0-9a-fA-F]+}} <col:9, col:13> 'D' 'void (int){{( __attribute__\(\(thiscall\)\))?}}'
|
||||
}
|
||||
|
||||
namespace PR38987 {
|
||||
struct A { A(); };
|
||||
template <class T> void f() { T{}; }
|
||||
template void f<A>();
|
||||
// CHECK: CXXTemporaryObjectExpr {{.*}} <col:31, col:33> 'PR38987::A':'PR38987::A'
|
||||
}
|
||||
|
||||
void abort() __attribute__((noreturn));
|
||||
|
||||
namespace std {
|
||||
|
@ -1,37 +1,29 @@
|
||||
// Test this without pch.
|
||||
// RUN: %clang_cc1 %s -DHEADER -DHEADER_USER -triple spir-unknown-unknown -verify -pedantic -fsyntax-only
|
||||
// RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only
|
||||
|
||||
// Test with pch.
|
||||
// RUN: %clang_cc1 %s -DHEADER -triple spir-unknown-unknown -emit-pch -o %t -verify -pedantic
|
||||
// RUN: %clang_cc1 %s -DHEADER_USER -triple spir-unknown-unknown -include-pch %t -fsyntax-only -verify -pedantic
|
||||
// RUN: %clang_cc1 -x cl %S/extension-begin.h -triple spir-unknown-unknown -emit-pch -o %t.pch -pedantic
|
||||
// RUN: %clang_cc1 %s -triple spir-unknown-unknown -include-pch %t.pch -DIMPLICIT_INCLUDE -DUSE_PCH -fsyntax-only -verify -pedantic
|
||||
|
||||
#if defined(HEADER) && !defined(INCLUDED)
|
||||
#define INCLUDED
|
||||
// Test with modules
|
||||
// RUN: rm -rf %t.modules
|
||||
// RUN: mkdir -p %t.modules
|
||||
//
|
||||
// RUN: %clang_cc1 -cl-std=CL1.2 -DIMPLICIT_INCLUDE -include %S/extension-begin.h -triple spir-unknown-unknown -O0 -emit-llvm -o - -fmodules -fimplicit-module-maps -fmodules-cache-path=%t.modules %s -verify -pedantic
|
||||
//
|
||||
// RUN: rm -rf %t.modules
|
||||
// RUN: mkdir -p %t.modules
|
||||
//
|
||||
// RUN: %clang_cc1 -cl-std=CL2.0 -DIMPLICIT_INCLUDE -include %S/extension-begin.h -triple spir-unknown-unknown -O0 -emit-llvm -o - -fmodules -fimplicit-module-maps -fmodules-cache-path=%t.modules %s -verify -pedantic
|
||||
|
||||
#pragma OPENCL EXTENSION all : begin // expected-warning {{expected 'disable' - ignoring}}
|
||||
#pragma OPENCL EXTENSION all : end // expected-warning {{expected 'disable' - ignoring}}
|
||||
|
||||
#pragma OPENCL EXTENSION my_ext : begin
|
||||
|
||||
struct A {
|
||||
int a;
|
||||
};
|
||||
|
||||
typedef struct A TypedefOfA;
|
||||
typedef const TypedefOfA* PointerOfA;
|
||||
|
||||
void f(void);
|
||||
|
||||
__attribute__((overloadable)) void g(long x);
|
||||
|
||||
#pragma OPENCL EXTENSION my_ext : end
|
||||
#pragma OPENCL EXTENSION my_ext : end // expected-warning {{OpenCL extension end directive mismatches begin directive - ignoring}}
|
||||
|
||||
__attribute__((overloadable)) void g(void);
|
||||
|
||||
#endif // defined(HEADER) && !defined(INCLUDED)
|
||||
|
||||
#ifdef HEADER_USER
|
||||
#ifndef IMPLICIT_INCLUDE
|
||||
#include "extension-begin.h"
|
||||
#endif // IMPLICIT_INCLUDE
|
||||
#ifndef USE_PCH
|
||||
// expected-warning@extension-begin.h:4 {{expected 'disable' - ignoring}}
|
||||
// expected-warning@extension-begin.h:5 {{expected 'disable' - ignoring}}
|
||||
// expected-warning@extension-begin.h:21 {{OpenCL extension end directive mismatches begin directive - ignoring}}
|
||||
#endif // USE_PCH
|
||||
|
||||
#pragma OPENCL EXTENSION my_ext : enable
|
||||
void test_f1(void) {
|
||||
@ -48,9 +40,7 @@ void test_f2(void) {
|
||||
PointerOfA test_A_pointer; // expected-error {{use of type 'PointerOfA' (aka 'const struct A *') requires my_ext extension to be enabled}}
|
||||
f(); // expected-error {{use of declaration 'f' requires my_ext extension to be enabled}}
|
||||
g(0); // expected-error {{no matching function for call to 'g'}}
|
||||
// expected-note@-26 {{candidate disabled due to OpenCL extension}}
|
||||
// expected-note@-22 {{candidate function not viable: requires 0 arguments, but 1 was provided}}
|
||||
// expected-note@extension-begin.h:18 {{candidate disabled due to OpenCL extension}}
|
||||
// expected-note@extension-begin.h:23 {{candidate function not viable: requires 0 arguments, but 1 was provided}}
|
||||
}
|
||||
|
||||
#endif // HEADER_USER
|
||||
|
||||
|
26
test/SemaOpenCL/extension-begin.h
Normal file
26
test/SemaOpenCL/extension-begin.h
Normal file
@ -0,0 +1,26 @@
|
||||
#ifndef INCLUDED
|
||||
#define INCLUDED
|
||||
|
||||
#pragma OPENCL EXTENSION all : begin
|
||||
#pragma OPENCL EXTENSION all : end
|
||||
|
||||
#pragma OPENCL EXTENSION my_ext : begin
|
||||
|
||||
struct A {
|
||||
int a;
|
||||
};
|
||||
|
||||
typedef struct A TypedefOfA;
|
||||
typedef const __private TypedefOfA* PointerOfA;
|
||||
|
||||
void f(void);
|
||||
|
||||
__attribute__((overloadable)) void g(long x);
|
||||
|
||||
#pragma OPENCL EXTENSION my_ext : end
|
||||
#pragma OPENCL EXTENSION my_ext : end
|
||||
|
||||
__attribute__((overloadable)) void g(void);
|
||||
|
||||
#endif // INCLUDED
|
||||
|
@ -1192,7 +1192,7 @@ OPTIONS:
|
||||
|
||||
By default, the exit status of scan-build is the same as the executed build
|
||||
command. Specifying this option causes the exit status of scan-build to be 1
|
||||
if it found potential bugs and 0 otherwise.
|
||||
if it found potential bugs and the exit status of the build itself otherwise.
|
||||
|
||||
--use-cc [compiler path]
|
||||
--use-cc=[compiler path]
|
||||
@ -1878,7 +1878,7 @@ if (defined $Options{OutputFormat}) {
|
||||
|
||||
if ($Options{ExitStatusFoundBugs}) {
|
||||
exit 1 if ($NumBugs > 0);
|
||||
exit 0;
|
||||
exit $ExitStatus;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user