Remove support for RenderScript (#112916)
See https://discourse.llvm.org/t/rfc-deprecate-and-eventually-remove-renderscript-support/81284 for the RFC
This commit is contained in:
parent
6827a00d4d
commit
af7c58b7ea
@ -46,6 +46,12 @@ code bases.
|
||||
|
||||
- The ``clang-rename`` tool has been removed.
|
||||
|
||||
- Removed support for RenderScript targets. This technology is
|
||||
`officially deprecated <https://developer.android.com/guide/topics/renderscript/compute>`_
|
||||
and users are encouraged to
|
||||
`migrate to Vulkan <https://developer.android.com/guide/topics/renderscript/migrate>`_
|
||||
or other options.
|
||||
|
||||
C/C++ Language Potentially Breaking Changes
|
||||
-------------------------------------------
|
||||
|
||||
|
@ -411,7 +411,6 @@ def SYCL : LangOpt<"SYCLIsDevice">;
|
||||
def COnly : LangOpt<"", "!LangOpts.CPlusPlus">;
|
||||
def CPlusPlus : LangOpt<"CPlusPlus">;
|
||||
def OpenCL : LangOpt<"OpenCL">;
|
||||
def RenderScript : LangOpt<"RenderScript">;
|
||||
def ObjC : LangOpt<"ObjC">;
|
||||
def BlocksSupported : LangOpt<"Blocks">;
|
||||
def ObjCAutoRefCount : LangOpt<"ObjCAutoRefCount">;
|
||||
@ -1629,14 +1628,6 @@ def OpenCLNoSVM : Attr {
|
||||
let ASTNode = 0;
|
||||
}
|
||||
|
||||
def RenderScriptKernel : Attr {
|
||||
let Spellings = [GNU<"kernel">];
|
||||
let Subjects = SubjectList<[Function]>;
|
||||
let Documentation = [RenderScriptKernelAttributeDocs];
|
||||
let LangOpts = [RenderScript];
|
||||
let SimpleHandler = 1;
|
||||
}
|
||||
|
||||
def Deprecated : InheritableAttr {
|
||||
let Spellings = [GCC<"deprecated">, Declspec<"deprecated">,
|
||||
CXX11<"","deprecated", 201309>,
|
||||
|
@ -5831,21 +5831,6 @@ provided with the regular ``visibility`` attribute.
|
||||
}];
|
||||
}
|
||||
|
||||
def RenderScriptKernelAttributeDocs : Documentation {
|
||||
let Category = DocCatFunction;
|
||||
let Content = [{
|
||||
``__attribute__((kernel))`` is used to mark a ``kernel`` function in
|
||||
RenderScript.
|
||||
|
||||
In RenderScript, ``kernel`` functions are used to express data-parallel
|
||||
computations. The RenderScript runtime efficiently parallelizes ``kernel``
|
||||
functions to run on computational resources such as multi-core CPUs and GPUs.
|
||||
See the RenderScript_ documentation for more information.
|
||||
|
||||
.. _RenderScript: https://developer.android.com/guide/topics/renderscript/compute.html
|
||||
}];
|
||||
}
|
||||
|
||||
def XRayDocs : Documentation {
|
||||
let Category = DocCatFunction;
|
||||
let Heading = "xray_always_instrument, xray_never_instrument, xray_log_args";
|
||||
|
@ -280,7 +280,6 @@ LANGOPT(OpenMPNoNestedParallelism , 1, 0, "Assume that no thread in a parallel
|
||||
LANGOPT(OpenMPOffloadMandatory , 1, 0, "Assert that offloading is mandatory and do not create a host fallback.")
|
||||
LANGOPT(OpenMPForceUSM , 1, 0, "Enable OpenMP unified shared memory mode via compiler.")
|
||||
LANGOPT(NoGPULib , 1, 0, "Indicate a build without the standard GPU libraries.")
|
||||
LANGOPT(RenderScript , 1, 0, "RenderScript")
|
||||
|
||||
LANGOPT(HLSL, 1, 0, "HLSL")
|
||||
ENUM_LANGOPT(HLSLVersion, HLSLLangStd, 16, HLSL_Unset, "HLSL Version")
|
||||
|
@ -39,7 +39,6 @@ enum class Language : uint8_t {
|
||||
OpenCL,
|
||||
OpenCLCXX,
|
||||
CUDA,
|
||||
RenderScript,
|
||||
HIP,
|
||||
HLSL,
|
||||
///@}
|
||||
|
@ -262,9 +262,6 @@ protected:
|
||||
LLVM_PREFERRED_TYPE(bool)
|
||||
unsigned HasBuiltinMSVaList : 1;
|
||||
|
||||
LLVM_PREFERRED_TYPE(bool)
|
||||
unsigned IsRenderScriptTarget : 1;
|
||||
|
||||
LLVM_PREFERRED_TYPE(bool)
|
||||
unsigned HasAArch64SVETypes : 1;
|
||||
|
||||
@ -1031,9 +1028,6 @@ public:
|
||||
/// available on this target.
|
||||
bool hasBuiltinMSVaList() const { return HasBuiltinMSVaList; }
|
||||
|
||||
/// Returns true for RenderScript.
|
||||
bool isRenderScriptTarget() const { return IsRenderScriptTarget; }
|
||||
|
||||
/// Returns whether or not the AArch64 SVE built-in types are
|
||||
/// available on this target.
|
||||
bool hasAArch64SVETypes() const { return HasAArch64SVETypes; }
|
||||
|
@ -627,7 +627,6 @@ defvar c23 = LangOpts<"C23">;
|
||||
defvar lang_std = LangOpts<"LangStd">;
|
||||
defvar open_cl = LangOpts<"OpenCL">;
|
||||
defvar cuda = LangOpts<"CUDA">;
|
||||
defvar render_script = LangOpts<"RenderScript">;
|
||||
defvar hip = LangOpts<"HIP">;
|
||||
defvar gnu_mode = LangOpts<"GNUMode">;
|
||||
defvar asm_preprocessor = LangOpts<"AsmPreprocessor">;
|
||||
@ -8118,11 +8117,11 @@ def vtordisp_mode_EQ : Joined<["-"], "vtordisp-mode=">,
|
||||
def fnative_half_type: Flag<["-"], "fnative-half-type">,
|
||||
HelpText<"Use the native half type for __fp16 instead of promoting to float">,
|
||||
MarshallingInfoFlag<LangOpts<"NativeHalfType">>,
|
||||
ImpliedByAnyOf<[open_cl.KeyPath, render_script.KeyPath]>;
|
||||
ImpliedByAnyOf<[open_cl.KeyPath]>;
|
||||
def fnative_half_arguments_and_returns : Flag<["-"], "fnative-half-arguments-and-returns">,
|
||||
HelpText<"Use the native __fp16 type for arguments and returns (and skip ABI-specific lowering)">,
|
||||
MarshallingInfoFlag<LangOpts<"NativeHalfArgsAndReturns">>,
|
||||
ImpliedByAnyOf<[open_cl.KeyPath, render_script.KeyPath, hlsl.KeyPath, hip.KeyPath]>;
|
||||
ImpliedByAnyOf<[open_cl.KeyPath, hlsl.KeyPath, hip.KeyPath]>;
|
||||
def fdefault_calling_conv_EQ : Joined<["-"], "fdefault-calling-conv=">,
|
||||
HelpText<"Set default calling convention">,
|
||||
Values<"cdecl,fastcall,stdcall,vectorcall,regcall,rtdcall">,
|
||||
|
@ -55,7 +55,6 @@ TYPE("c++", CXX, PP_CXX, "cpp", phases
|
||||
TYPE("objective-c++-cpp-output", PP_ObjCXX, INVALID, "mii", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
|
||||
TYPE("objc++-cpp-output", PP_ObjCXX_Alias, INVALID, "mii", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
|
||||
TYPE("objective-c++", ObjCXX, PP_ObjCXX, "mm", phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, phases::Link)
|
||||
TYPE("renderscript", RenderScript, PP_C, "rs", phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble, phases::Link)
|
||||
TYPE("hlsl", HLSL, PP_CXX, "hlsl", phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble)
|
||||
|
||||
// C family input files to precompile.
|
||||
|
@ -203,8 +203,6 @@ void LangOptions::setLangDefaults(LangOptions &Opts, Language Lang,
|
||||
Opts.setDefaultFPContractMode(LangOptions::FPM_Fast);
|
||||
}
|
||||
|
||||
Opts.RenderScript = Lang == Language::RenderScript;
|
||||
|
||||
// OpenCL, C++ and C23 have bool, true, false keywords.
|
||||
Opts.Bool = Opts.OpenCL || Opts.CPlusPlus || Opts.C23;
|
||||
|
||||
|
@ -37,8 +37,6 @@ StringRef clang::languageToString(Language L) {
|
||||
return "OpenCLC++";
|
||||
case Language::CUDA:
|
||||
return "CUDA";
|
||||
case Language::RenderScript:
|
||||
return "RenderScript";
|
||||
case Language::HIP:
|
||||
return "HIP";
|
||||
case Language::HLSL:
|
||||
@ -114,8 +112,6 @@ LangStandard::Kind clang::getDefaultLanguageStandard(clang::Language Lang,
|
||||
case Language::CUDA:
|
||||
case Language::HIP:
|
||||
return LangStandard::lang_gnucxx17;
|
||||
case Language::RenderScript:
|
||||
return LangStandard::lang_c99;
|
||||
case Language::HLSL:
|
||||
return LangStandard::lang_hlsl202x;
|
||||
}
|
||||
|
@ -154,7 +154,6 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
|
||||
SSERegParmMax = 0;
|
||||
HasAlignMac68kSupport = false;
|
||||
HasBuiltinMSVaList = false;
|
||||
IsRenderScriptTarget = false;
|
||||
HasAArch64SVETypes = false;
|
||||
HasRISCVVTypes = false;
|
||||
AllowAMDGPUUnsafeFPAtomics = false;
|
||||
|
@ -710,12 +710,6 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
|
||||
|
||||
case llvm::Triple::dxil:
|
||||
return std::make_unique<DirectXTargetInfo>(Triple, Opts);
|
||||
case llvm::Triple::renderscript32:
|
||||
return std::make_unique<LinuxTargetInfo<RenderScript32TargetInfo>>(Triple,
|
||||
Opts);
|
||||
case llvm::Triple::renderscript64:
|
||||
return std::make_unique<LinuxTargetInfo<RenderScript64TargetInfo>>(Triple,
|
||||
Opts);
|
||||
|
||||
case llvm::Triple::ve:
|
||||
return std::make_unique<LinuxTargetInfo<VETargetInfo>>(Triple, Opts);
|
||||
|
@ -1723,19 +1723,3 @@ TargetInfo::BuiltinVaListKind
|
||||
DarwinAArch64TargetInfo::getBuiltinVaListKind() const {
|
||||
return TargetInfo::CharPtrBuiltinVaList;
|
||||
}
|
||||
|
||||
// 64-bit RenderScript is aarch64
|
||||
RenderScript64TargetInfo::RenderScript64TargetInfo(const llvm::Triple &Triple,
|
||||
const TargetOptions &Opts)
|
||||
: AArch64leTargetInfo(llvm::Triple("aarch64", Triple.getVendorName(),
|
||||
Triple.getOSName(),
|
||||
Triple.getEnvironmentName()),
|
||||
Opts) {
|
||||
IsRenderScriptTarget = true;
|
||||
}
|
||||
|
||||
void RenderScript64TargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||
MacroBuilder &Builder) const {
|
||||
Builder.defineMacro("__RENDERSCRIPT__");
|
||||
AArch64leTargetInfo::getTargetDefines(Opts, Builder);
|
||||
}
|
||||
|
@ -319,17 +319,6 @@ public:
|
||||
MacroBuilder &Builder) const override;
|
||||
};
|
||||
|
||||
// 64-bit RenderScript is aarch64
|
||||
class LLVM_LIBRARY_VISIBILITY RenderScript64TargetInfo
|
||||
: public AArch64leTargetInfo {
|
||||
public:
|
||||
RenderScript64TargetInfo(const llvm::Triple &Triple,
|
||||
const TargetOptions &Opts);
|
||||
|
||||
void getTargetDefines(const LangOptions &Opts,
|
||||
MacroBuilder &Builder) const override;
|
||||
};
|
||||
|
||||
} // namespace targets
|
||||
} // namespace clang
|
||||
|
||||
|
@ -1498,19 +1498,3 @@ void DarwinARMTargetInfo::getOSDefines(const LangOptions &Opts,
|
||||
MacroBuilder &Builder) const {
|
||||
getDarwinDefines(Builder, Opts, Triple, PlatformName, PlatformMinVersion);
|
||||
}
|
||||
|
||||
RenderScript32TargetInfo::RenderScript32TargetInfo(const llvm::Triple &Triple,
|
||||
const TargetOptions &Opts)
|
||||
: ARMleTargetInfo(llvm::Triple("armv7", Triple.getVendorName(),
|
||||
Triple.getOSName(),
|
||||
Triple.getEnvironmentName()),
|
||||
Opts) {
|
||||
IsRenderScriptTarget = true;
|
||||
LongWidth = LongAlign = 64;
|
||||
}
|
||||
|
||||
void RenderScript32TargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||
MacroBuilder &Builder) const {
|
||||
Builder.defineMacro("__RENDERSCRIPT__");
|
||||
ARMleTargetInfo::getTargetDefines(Opts, Builder);
|
||||
}
|
||||
|
@ -310,17 +310,6 @@ public:
|
||||
DarwinARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts);
|
||||
};
|
||||
|
||||
// 32-bit RenderScript is armv7 with width and align of 'long' set to 8-bytes
|
||||
class LLVM_LIBRARY_VISIBILITY RenderScript32TargetInfo
|
||||
: public ARMleTargetInfo {
|
||||
public:
|
||||
RenderScript32TargetInfo(const llvm::Triple &Triple,
|
||||
const TargetOptions &Opts);
|
||||
|
||||
void getTargetDefines(const LangOptions &Opts,
|
||||
MacroBuilder &Builder) const override;
|
||||
};
|
||||
|
||||
} // namespace targets
|
||||
} // namespace clang
|
||||
|
||||
|
@ -80,16 +80,6 @@ RValue DefaultABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
|
||||
Slot);
|
||||
}
|
||||
|
||||
ABIArgInfo CodeGen::coerceToIntArray(QualType Ty, ASTContext &Context,
|
||||
llvm::LLVMContext &LLVMContext) {
|
||||
// Alignment and Size are measured in bits.
|
||||
const uint64_t Size = Context.getTypeSize(Ty);
|
||||
const uint64_t Alignment = Context.getTypeAlign(Ty);
|
||||
llvm::Type *IntType = llvm::Type::getIntNTy(LLVMContext, Alignment);
|
||||
const uint64_t NumElements = (Size + Alignment - 1) / Alignment;
|
||||
return ABIArgInfo::getDirect(llvm::ArrayType::get(IntType, NumElements));
|
||||
}
|
||||
|
||||
void CodeGen::AssignToArrayRange(CodeGen::CGBuilderTy &Builder,
|
||||
llvm::Value *Array, llvm::Value *Value,
|
||||
unsigned FirstIndex, unsigned LastIndex) {
|
||||
|
@ -33,23 +33,6 @@ public:
|
||||
AggValueSlot Slot) const override;
|
||||
};
|
||||
|
||||
// Helper for coercing an aggregate argument or return value into an integer
|
||||
// array of the same size (including padding) and alignment. This alternate
|
||||
// coercion happens only for the RenderScript ABI and can be removed after
|
||||
// runtimes that rely on it are no longer supported.
|
||||
//
|
||||
// RenderScript assumes that the size of the argument / return value in the IR
|
||||
// is the same as the size of the corresponding qualified type. This helper
|
||||
// coerces the aggregate type into an array of the same size (including
|
||||
// padding). This coercion is used in lieu of expansion of struct members or
|
||||
// other canonical coercions that return a coerced-type of larger size.
|
||||
//
|
||||
// Ty - The argument / return value type
|
||||
// Context - The associated ASTContext
|
||||
// LLVMContext - The associated LLVMContext
|
||||
ABIArgInfo coerceToIntArray(QualType Ty, ASTContext &Context,
|
||||
llvm::LLVMContext &LLVMContext);
|
||||
|
||||
void AssignToArrayRange(CodeGen::CGBuilderTy &Builder, llvm::Value *Array,
|
||||
llvm::Value *Value, unsigned FirstIndex,
|
||||
unsigned LastIndex);
|
||||
|
@ -624,8 +624,6 @@ void CGDebugInfo::CreateCompileUnit() {
|
||||
} else if (LO.OpenCL && (!CGM.getCodeGenOpts().DebugStrictDwarf ||
|
||||
CGM.getCodeGenOpts().DwarfVersion >= 5)) {
|
||||
LangTag = llvm::dwarf::DW_LANG_OpenCL;
|
||||
} else if (LO.RenderScript) {
|
||||
LangTag = llvm::dwarf::DW_LANG_GOOGLE_RenderScript;
|
||||
} else if (LO.C11 && !(CGO.DebugStrictDwarf && CGO.DwarfVersion < 5)) {
|
||||
LangTag = llvm::dwarf::DW_LANG_C11;
|
||||
} else if (LO.C99) {
|
||||
|
@ -462,11 +462,6 @@ ABIArgInfo AArch64ABIInfo::classifyArgumentType(QualType Ty, bool IsVariadicFn,
|
||||
|
||||
// Aggregates <= 16 bytes are passed directly in registers or on the stack.
|
||||
if (Size <= 128) {
|
||||
// On RenderScript, coerce Aggregates <= 16 bytes to an integer array of
|
||||
// same size and alignment.
|
||||
if (getTarget().isRenderScriptTarget()) {
|
||||
return coerceToIntArray(Ty, getContext(), getVMContext());
|
||||
}
|
||||
unsigned Alignment;
|
||||
if (Kind == AArch64ABIKind::AAPCS) {
|
||||
Alignment = getContext().getTypeUnadjustedAlign(Ty);
|
||||
@ -548,12 +543,6 @@ ABIArgInfo AArch64ABIInfo::classifyReturnType(QualType RetTy,
|
||||
|
||||
// Aggregates <= 16 bytes are returned directly in registers or on the stack.
|
||||
if (Size <= 128) {
|
||||
// On RenderScript, coerce Aggregates <= 16 bytes to an integer array of
|
||||
// same size and alignment.
|
||||
if (getTarget().isRenderScriptTarget()) {
|
||||
return coerceToIntArray(RetTy, getContext(), getVMContext());
|
||||
}
|
||||
|
||||
if (Size <= 64 && getDataLayout().isLittleEndian()) {
|
||||
// Composite types are returned in lower bits of a 64-bit register for LE,
|
||||
// and in higher bits for BE. However, integer types are always returned
|
||||
|
@ -420,12 +420,6 @@ ABIArgInfo ARMABIInfo::classifyArgumentType(QualType Ty, bool isVariadic,
|
||||
/*Realign=*/TyAlign > ABIAlign);
|
||||
}
|
||||
|
||||
// On RenderScript, coerce Aggregates <= 64 bytes to an integer array of
|
||||
// same size and alignment.
|
||||
if (getTarget().isRenderScriptTarget()) {
|
||||
return coerceToIntArray(Ty, getContext(), getVMContext());
|
||||
}
|
||||
|
||||
// Otherwise, pass by coercing to a structure of the appropriate size.
|
||||
llvm::Type* ElemTy;
|
||||
unsigned SizeRegs;
|
||||
@ -609,11 +603,6 @@ ABIArgInfo ARMABIInfo::classifyReturnType(QualType RetTy, bool isVariadic,
|
||||
// are returned indirectly.
|
||||
uint64_t Size = getContext().getTypeSize(RetTy);
|
||||
if (Size <= 32) {
|
||||
// On RenderScript, coerce Aggregates <= 4 bytes to an integer array of
|
||||
// same size and alignment.
|
||||
if (getTarget().isRenderScriptTarget()) {
|
||||
return coerceToIntArray(RetTy, getContext(), getVMContext());
|
||||
}
|
||||
if (getDataLayout().isBigEndian())
|
||||
// Return in 32 bit integer integer type (as if loaded by LDR, AAPCS 5.4)
|
||||
return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
|
||||
|
@ -201,7 +201,6 @@ bool types::isDerivedFromC(ID Id) {
|
||||
case TY_PP_ObjCXX:
|
||||
case TY_PP_ObjCXX_Alias:
|
||||
case TY_ObjCXX:
|
||||
case TY_RenderScript:
|
||||
case TY_PP_CHeader:
|
||||
case TY_CHeader:
|
||||
case TY_CLHeader:
|
||||
@ -328,7 +327,6 @@ types::ID types::lookupTypeForExtension(llvm::StringRef Ext) {
|
||||
.Case("ll", TY_LLVM_IR)
|
||||
.Case("mi", TY_PP_ObjC)
|
||||
.Case("mm", TY_ObjCXX)
|
||||
.Case("rs", TY_RenderScript)
|
||||
.Case("adb", TY_Ada)
|
||||
.Case("ads", TY_Ada)
|
||||
.Case("asm", TY_PP_Asm)
|
||||
|
@ -213,7 +213,6 @@ StringRef getLanguageName(Language Lang) {
|
||||
case Language::OpenCL:
|
||||
case Language::OpenCLCXX:
|
||||
case Language::CUDA:
|
||||
case Language::RenderScript:
|
||||
case Language::HIP:
|
||||
case Language::HLSL:
|
||||
|
||||
|
@ -2699,8 +2699,6 @@ InputKind ASTUnit::getInputKind() const {
|
||||
Lang = Language::OpenCL;
|
||||
else if (LangOpts.CUDA)
|
||||
Lang = Language::CUDA;
|
||||
else if (LangOpts.RenderScript)
|
||||
Lang = Language::RenderScript;
|
||||
else if (LangOpts.CPlusPlus)
|
||||
Lang = LangOpts.ObjC ? Language::ObjCXX : Language::CXX;
|
||||
else
|
||||
|
@ -2846,9 +2846,6 @@ static void GenerateFrontendArgs(const FrontendOptions &Opts,
|
||||
case Language::ObjCXX:
|
||||
Lang = "objective-c++";
|
||||
break;
|
||||
case Language::RenderScript:
|
||||
Lang = "renderscript";
|
||||
break;
|
||||
case Language::Asm:
|
||||
Lang = "assembler-with-cpp";
|
||||
break;
|
||||
@ -3071,7 +3068,6 @@ static bool ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
|
||||
.Case("c++", Language::CXX)
|
||||
.Case("objective-c", Language::ObjC)
|
||||
.Case("objective-c++", Language::ObjCXX)
|
||||
.Case("renderscript", Language::RenderScript)
|
||||
.Case("hlsl", Language::HLSL)
|
||||
.Default(Language::Unknown);
|
||||
|
||||
@ -3499,7 +3495,6 @@ static bool IsInputCompatibleWithStandard(InputKind IK,
|
||||
|
||||
case Language::C:
|
||||
case Language::ObjC:
|
||||
case Language::RenderScript:
|
||||
return S.getLanguage() == Language::C;
|
||||
|
||||
case Language::OpenCL:
|
||||
@ -3551,8 +3546,6 @@ static StringRef GetInputKindName(InputKind IK) {
|
||||
return "C++ for OpenCL";
|
||||
case Language::CUDA:
|
||||
return "CUDA";
|
||||
case Language::RenderScript:
|
||||
return "RenderScript";
|
||||
case Language::HIP:
|
||||
return "HIP";
|
||||
|
||||
|
@ -1108,7 +1108,6 @@ void PrintPreambleAction::ExecuteAction() {
|
||||
case Language::Unknown:
|
||||
case Language::Asm:
|
||||
case Language::LLVM_IR:
|
||||
case Language::RenderScript:
|
||||
// We can't do anything with these.
|
||||
return;
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
// RUN: %clang -emit-llvm -S -g %s -o - | FileCheck %s
|
||||
|
||||
// CHECK: !DICompileUnit(language: DW_LANG_GOOGLE_RenderScript{{.*}})
|
@ -6,8 +6,6 @@
|
||||
// RUN: | FileCheck %s --check-prefix=NATIVE-HALF
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -triple aarch64 -fnative-half-type %s \
|
||||
// RUN: | FileCheck %s --check-prefix=NATIVE-HALF
|
||||
// RUN: %clang_cc1 -emit-llvm -o - -x renderscript %s \
|
||||
// RUN: | FileCheck %s --check-prefix=NATIVE-HALF
|
||||
typedef unsigned cond_t;
|
||||
typedef __fp16 float16_t;
|
||||
|
||||
|
@ -1,140 +0,0 @@
|
||||
// RUN: %clang_cc1 %s -triple=renderscript32-none-linux-gnueabi -emit-llvm -o - -Werror | FileCheck %s -check-prefix=CHECK-RS32
|
||||
// RUN: %clang_cc1 %s -triple=renderscript64-none-linux-android -emit-llvm -o - -Werror | FileCheck %s -check-prefix=CHECK-RS64
|
||||
// RUN: %clang_cc1 %s -triple=armv7-none-linux-gnueabi -emit-llvm -o - -Werror | FileCheck %s -check-prefix=CHECK-ARM
|
||||
|
||||
// Ensure that the bitcode has the correct triple
|
||||
// CHECK-RS32: target triple = "armv7-none-linux-gnueabi"
|
||||
// CHECK-RS64: target triple = "aarch64-none-linux-android"
|
||||
// CHECK-ARM: target triple = "armv7-none-linux-gnueabi"
|
||||
|
||||
// Ensure that long data type has 8-byte size and alignment in RenderScript
|
||||
#ifdef __RENDERSCRIPT__
|
||||
#define LONG_WIDTH_AND_ALIGN 8
|
||||
#else
|
||||
#define LONG_WIDTH_AND_ALIGN 4
|
||||
#endif
|
||||
|
||||
_Static_assert(sizeof(long) == LONG_WIDTH_AND_ALIGN, "sizeof long is wrong");
|
||||
_Static_assert(_Alignof(long) == LONG_WIDTH_AND_ALIGN, "sizeof long is wrong");
|
||||
|
||||
// CHECK-RS32: i64 @test_long(i64 noundef %v)
|
||||
// CHECK-RS64: i64 @test_long(i64 noundef %v)
|
||||
// CHECK-ARM: i32 @test_long(i32 noundef %v)
|
||||
long test_long(long v) {
|
||||
return v + 1;
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Test coercion of aggregate argument or return value into integer arrays
|
||||
// =============================================================================
|
||||
|
||||
// =============================================================================
|
||||
// aggregate parameter <= 4 bytes: coerced to [a x iNN] for both 32-bit and
|
||||
// 64-bit RenderScript
|
||||
// ==============================================================================
|
||||
|
||||
typedef struct {char c1, c2, c3; } sChar3;
|
||||
typedef struct {short s; char c;} sShortChar;
|
||||
|
||||
// CHECK-RS32: void @argChar3([3 x i8] %s.coerce)
|
||||
// CHECK-RS64: void @argChar3([3 x i8] %s.coerce)
|
||||
void argChar3(sChar3 s) {}
|
||||
|
||||
// CHECK-RS32: void @argShortChar([2 x i16] %s.coerce)
|
||||
// CHECK-RS64: void @argShortChar([2 x i16] %s.coerce)
|
||||
void argShortChar(sShortChar s) {}
|
||||
|
||||
// =============================================================================
|
||||
// aggregate return value <= 4 bytes: coerced to [a x iNN] for both 32-bit and
|
||||
// 64-bit RenderScript
|
||||
// =============================================================================
|
||||
|
||||
// CHECK-RS32: [3 x i8] @retChar3()
|
||||
// CHECK-RS64: [3 x i8] @retChar3()
|
||||
sChar3 retChar3(void) { sChar3 r; return r; }
|
||||
|
||||
// CHECK-RS32: [2 x i16] @retShortChar()
|
||||
// CHECK-RS64: [2 x i16] @retShortChar()
|
||||
sShortChar retShortChar(void) { sShortChar r; return r; }
|
||||
|
||||
// =============================================================================
|
||||
// aggregate parameter <= 16 bytes: coerced to [a x iNN] for both 32-bit and
|
||||
// 64-bit RenderScript
|
||||
// =============================================================================
|
||||
|
||||
typedef struct {short s1; char c; short s2; } sShortCharShort;
|
||||
typedef struct {int i; short s; char c; } sIntShortChar;
|
||||
typedef struct {long l; int i; } sLongInt;
|
||||
|
||||
// CHECK-RS32: void @argShortCharShort([3 x i16] %s.coerce)
|
||||
// CHECK-RS64: void @argShortCharShort([3 x i16] %s.coerce)
|
||||
void argShortCharShort(sShortCharShort s) {}
|
||||
|
||||
// CHECK-RS32: void @argIntShortChar([2 x i32] %s.coerce)
|
||||
// CHECK-RS64: void @argIntShortChar([2 x i32] %s.coerce)
|
||||
void argIntShortChar(sIntShortChar s) {}
|
||||
|
||||
// CHECK-RS32: void @argLongInt([2 x i64] %s.coerce)
|
||||
// CHECK-RS64: void @argLongInt([2 x i64] %s.coerce)
|
||||
void argLongInt(sLongInt s) {}
|
||||
|
||||
// =============================================================================
|
||||
// aggregate return value <= 16 bytes: returned on stack for 32-bit RenderScript
|
||||
// and coerced to [a x iNN] for 64-bit RenderScript
|
||||
// =============================================================================
|
||||
|
||||
// CHECK-RS32: void @retShortCharShort(ptr dead_on_unwind noalias writable sret(%struct.sShortCharShort) align 2 %agg.result)
|
||||
// CHECK-RS64: [3 x i16] @retShortCharShort()
|
||||
sShortCharShort retShortCharShort(void) { sShortCharShort r; return r; }
|
||||
|
||||
// CHECK-RS32: void @retIntShortChar(ptr dead_on_unwind noalias writable sret(%struct.sIntShortChar) align 4 %agg.result)
|
||||
// CHECK-RS64: [2 x i32] @retIntShortChar()
|
||||
sIntShortChar retIntShortChar(void) { sIntShortChar r; return r; }
|
||||
|
||||
// CHECK-RS32: void @retLongInt(ptr dead_on_unwind noalias writable sret(%struct.sLongInt) align 8 %agg.result)
|
||||
// CHECK-RS64: [2 x i64] @retLongInt()
|
||||
sLongInt retLongInt(void) { sLongInt r; return r; }
|
||||
|
||||
// =============================================================================
|
||||
// aggregate parameter <= 64 bytes: coerced to [a x iNN] for 32-bit RenderScript
|
||||
// and passed on the stack for 64-bit RenderScript
|
||||
// =============================================================================
|
||||
|
||||
typedef struct {int i1, i2, i3, i4, i5; } sInt5;
|
||||
typedef struct {long l1, l2; char c; } sLong2Char;
|
||||
|
||||
// CHECK-RS32: void @argInt5([5 x i32] %s.coerce)
|
||||
// CHECK-RS64: void @argInt5(ptr noundef %s)
|
||||
void argInt5(sInt5 s) {}
|
||||
|
||||
// CHECK-RS32: void @argLong2Char([3 x i64] %s.coerce)
|
||||
// CHECK-RS64: void @argLong2Char(ptr noundef %s)
|
||||
void argLong2Char(sLong2Char s) {}
|
||||
|
||||
// =============================================================================
|
||||
// aggregate return value <= 64 bytes: returned on stack for both 32-bit and
|
||||
// 64-bit RenderScript
|
||||
// =============================================================================
|
||||
|
||||
// CHECK-RS32: void @retInt5(ptr dead_on_unwind noalias writable sret(%struct.sInt5) align 4 %agg.result)
|
||||
// CHECK-RS64: void @retInt5(ptr dead_on_unwind noalias writable sret(%struct.sInt5) align 4 %agg.result)
|
||||
sInt5 retInt5(void) { sInt5 r; return r;}
|
||||
|
||||
// CHECK-RS32: void @retLong2Char(ptr dead_on_unwind noalias writable sret(%struct.sLong2Char) align 8 %agg.result)
|
||||
// CHECK-RS64: void @retLong2Char(ptr dead_on_unwind noalias writable sret(%struct.sLong2Char) align 8 %agg.result)
|
||||
sLong2Char retLong2Char(void) { sLong2Char r; return r;}
|
||||
|
||||
// =============================================================================
|
||||
// aggregate parameters and return values > 64 bytes: passed and returned on the
|
||||
// stack for both 32-bit and 64-bit RenderScript
|
||||
// =============================================================================
|
||||
|
||||
typedef struct {long l1, l2, l3, l4, l5, l6, l7, l8, l9; } sLong9;
|
||||
|
||||
// CHECK-RS32: void @argLong9(ptr noundef byval(%struct.sLong9) align 8 %s)
|
||||
// CHECK-RS64: void @argLong9(ptr noundef %s)
|
||||
void argLong9(sLong9 s) {}
|
||||
|
||||
// CHECK-RS32: void @retLong9(ptr dead_on_unwind noalias writable sret(%struct.sLong9) align 8 %agg.result)
|
||||
// CHECK-RS64: void @retLong9(ptr dead_on_unwind noalias writable sret(%struct.sLong9) align 8 %agg.result)
|
||||
sLong9 retLong9(void) { sLong9 r; return r; }
|
@ -1,3 +0,0 @@
|
||||
// RUN: %clang -### 2>&1 %s | FileCheck %s
|
||||
|
||||
// CHECK: "-x" "renderscript"
|
@ -4,7 +4,6 @@
|
||||
|
||||
// RUN: not %clang %s -std=foobar -c 2>&1 | FileCheck --match-full-lines %s
|
||||
// RUN: not %clang -x objective-c %s -std=foobar -c 2>&1 | FileCheck --match-full-lines %s
|
||||
// RUN: not %clang -x renderscript %s -std=foobar -c 2>&1 | FileCheck --match-full-lines %s
|
||||
|
||||
// CHECK: error: invalid value 'foobar' in '-std=foobar'
|
||||
// CHECK-NEXT: note: use 'c89', 'c90', or 'iso9899:1990' for 'ISO C 1990' standard
|
||||
|
@ -173,7 +173,6 @@
|
||||
// CHECK-NEXT: RandomizeLayout (SubjectMatchRule_record)
|
||||
// CHECK-NEXT: ReadOnlyPlacement (SubjectMatchRule_record)
|
||||
// CHECK-NEXT: ReleaseHandle (SubjectMatchRule_variable_is_parameter)
|
||||
// CHECK-NEXT: RenderScriptKernel (SubjectMatchRule_function)
|
||||
// CHECK-NEXT: ReqdWorkGroupSize (SubjectMatchRule_function)
|
||||
// CHECK-NEXT: Restrict (SubjectMatchRule_function)
|
||||
// CHECK-NEXT: ReturnTypestate (SubjectMatchRule_function, SubjectMatchRule_variable_is_parameter)
|
||||
|
@ -179,8 +179,6 @@
|
||||
// RUN: %clang_cc1 %s -Eonly -Wsystem-headers -Werror -triple wasm64-wasi
|
||||
// RUN: %clang_cc1 %s -Eonly -Wsystem-headers -Werror -triple wasm64-emscripten
|
||||
// RUN: %clang_cc1 %s -Eonly -Wsystem-headers -Werror -triple dxil
|
||||
// RUN: %clang_cc1 %s -Eonly -Wsystem-headers -Werror -triple renderscript32
|
||||
// RUN: %clang_cc1 %s -Eonly -Wsystem-headers -Werror -triple renderscript64
|
||||
// RUN: %clang_cc1 %s -Eonly -Wsystem-headers -Werror -triple ve
|
||||
// RUN: %clang_cc1 %s -Eonly -Wsystem-headers -Werror -triple csky
|
||||
// RUN: %clang_cc1 %s -Eonly -Wsystem-headers -Werror -triple csky-linux
|
||||
|
@ -1,25 +0,0 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -x renderscript -D__RENDERSCRIPT__ %s
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fsyntax-only -verify -x c %s
|
||||
// REQUIRES: x86-registered-target
|
||||
|
||||
#ifndef __RENDERSCRIPT__
|
||||
// expected-warning@+2 {{'kernel' attribute ignored}}
|
||||
#endif
|
||||
void __attribute__((kernel)) kernel(void) {}
|
||||
|
||||
#ifndef __RENDERSCRIPT__
|
||||
// expected-warning@+4 {{'kernel' attribute ignored}}
|
||||
#else
|
||||
// expected-warning@+2 {{'kernel' attribute only applies to functions}}
|
||||
#endif
|
||||
int __attribute__((kernel)) global;
|
||||
|
||||
#ifndef __RENDERSCRIPT__
|
||||
// expected-error@+2 {{function return value cannot have __fp16 type; did you forget * ?}}
|
||||
#endif
|
||||
__fp16 fp16_return(void);
|
||||
|
||||
#ifndef __RENDERSCRIPT__
|
||||
// expected-error@+2 {{parameters cannot have __fp16 type; did you forget * ?}}
|
||||
#endif
|
||||
void fp16_arg(__fp16 p);
|
@ -16,8 +16,8 @@
|
||||
<!--*********************************************************************-->
|
||||
|
||||
<p>The Clang project provides a language front-end and tooling infrastructure
|
||||
for languages in the C language family (C, C++, Objective C/C++, OpenCL,
|
||||
CUDA, and RenderScript) for the <a href="https://www.llvm.org/">LLVM</a>
|
||||
for languages in the C language family (C, C++, Objective C/C++, OpenCL, and
|
||||
CUDA) for the <a href="https://www.llvm.org/">LLVM</a>
|
||||
project. Both a GCC-compatible compiler driver (<tt>clang</tt>) and an
|
||||
MSVC-compatible compiler driver (<tt>clang-cl.exe</tt>) are provided. You
|
||||
can <a href="get_started.html">get and build</a> the source today.</p>
|
||||
|
Loading…
x
Reference in New Issue
Block a user