Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add LLVM 19.1.x support for LDC #4772

Merged
merged 12 commits into from
Nov 27, 2024
2 changes: 1 addition & 1 deletion .cirrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ install_ubuntu_prerequisites_template: &INSTALL_UBUNTU_PREREQUISITES_TEMPLATE
environment:
CIRRUS_CLONE_DEPTH: 50
HOST_LDC_VERSION: 1.31.0
LLVM_VERSION: 18.1.8
LLVM_VERSION: 19.1.3
GITHUB_TOKEN: ENCRYPTED[0955bd48c8d4e5391446fc0149d0719ad0b63df27ec9e6c180a5730a5b10dc7f28f09d1383423db158d21380ee2b022a]

task:
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/3-build-cross/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ inputs:
default: false
android_ndk_version:
required: false
default: r27
default: r27c
android_api_level:
required: false
default: 29
Expand Down
8 changes: 4 additions & 4 deletions .github/actions/3-build-cross/android-llvm-config.in
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ LIBFILE="${prefix}/lib/libLLVM-$version.so"

components="aarch64 aarch64asmparser aarch64codegen aarch64desc aarch64disassembler aarch64info aarch64utils \
aggressiveinstcombine all all-targets analysis arm armasmparser armcodegen armdesc armdisassembler arminfo armutils \
asmparser asmprinter binaryformat bitreader bitstreamreader bitwriter cfguard codegen codegentypes core coroutines coverage \
asmparser asmprinter binaryformat bitreader bitstreamreader bitwriter cfguard codegen codegendata codegentypes core coroutines coverage \
debuginfobtf debuginfocodeview debuginfodwarf debuginfogsym debuginfologicalview debuginfomsf debuginfopdb demangle dlltooldriver dwarflinker dwarflinkerclassic dwarflinkerparallel dwp \
engine executionengine extensions filecheck frontenddriver frontendhlsl frontendoffloading frontendopenacc frontendopenmp fuzzercli fuzzmutate globalisel hipstdpar instcombine \
instrumentation interfacestub interpreter ipo irprinter irreader jitlink libdriver lineeditor linker lto mc mca mcdisassembler \
mcjit mcparser mirparser native nativecodegen objcarcopts objcopy object objectyaml option orcdebugging orcjit orcshared orctargetprocess \
passes profiledata remarks runtimedyld scalaropts selectiondag spirv spirvcodegen spirvdesc spirvinfo support symbolize tablegen target targetparser textapi \
passes profiledata remarks runtimedyld sandboxir scalaropts selectiondag spirv spirvanalysis spirvcodegen spirvdesc spirvinfo support symbolize tablegen target targetparser textapi \
textapibinaryreader transformutils vectorize webassembly webassemblyasmparser webassemblycodegen webassemblydesc webassemblydisassembler \
webassemblyinfo webassemblyutils windowsdriver windowsmanifest x86 x86asmparser x86codegen x86desc x86disassembler x86info \
x86targetmca xray"
static_libs="-lLLVMWindowsManifest -lLLVMXRay -lLLVMLibDriver -lLLVMDlltoolDriver -lLLVMTextAPIBinaryReader -lLLVMCoverage -lLLVMLineEditor \
-lLLVMSPIRVCodeGen -lLLVMSPIRVDesc -lLLVMSPIRVInfo \
-lLLVMSandboxIR -lLLVMSPIRVCodeGen -lLLVMSPIRVDesc -lLLVMSPIRVInfo -lLLVMSPIRVAnalysis \
-lLLVMX86TargetMCA -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMWebAssemblyDisassembler \
-lLLVMWebAssemblyAsmParser -lLLVMWebAssemblyCodeGen -lLLVMWebAssemblyUtils -lLLVMWebAssemblyDesc -lLLVMWebAssemblyInfo -lLLVMARMDisassembler \
-lLLVMARMAsmParser -lLLVMARMCodeGen -lLLVMARMDesc -lLLVMARMUtils -lLLVMARMInfo -lLLVMAArch64Disassembler \
Expand All @@ -71,7 +71,7 @@ static_libs="-lLLVMWindowsManifest -lLLVMXRay -lLLVMLibDriver -lLLVMDlltoolDrive
-lLLVMDWP -lLLVMDebugInfoLogicalView -lLLVMDebugInfoGSYM -lLLVMOption -lLLVMObjectYAML -lLLVMObjCopy -lLLVMMCA \
-lLLVMMCDisassembler -lLLVMLTO -lLLVMPasses -lLLVMHipStdPar -lLLVMCFGuard -lLLVMCoroutines -lLLVMipo \
-lLLVMVectorize -lLLVMLinker -lLLVMInstrumentation -lLLVMFrontendOpenMP -lLLVMFrontendOffloading -lLLVMFrontendOpenACC -lLLVMFrontendHLSL -lLLVMFrontendDriver -lLLVMExtensions \
-lLLVMDWARFLinkerParallel -lLLVMDWARFLinkerClassic -lLLVMDWARFLinker -lLLVMGlobalISel -lLLVMMIRParser -lLLVMAsmPrinter -lLLVMSelectionDAG \
-lLLVMDWARFLinkerParallel -lLLVMDWARFLinkerClassic -lLLVMDWARFLinker -lLLVMCodeGenData -lLLVMGlobalISel -lLLVMMIRParser -lLLVMAsmPrinter -lLLVMSelectionDAG \
-lLLVMCodeGen -lLLVMTarget -lLLVMObjCARCOpts -lLLVMCodeGenTypes -lLLVMIRPrinter -lLLVMInterfaceStub -lLLVMFileCheck -lLLVMFuzzMutate \
-lLLVMScalarOpts -lLLVMInstCombine -lLLVMAggressiveInstCombine -lLLVMTransformUtils -lLLVMBitWriter -lLLVMAnalysis \
-lLLVMProfileData -lLLVMSymbolize -lLLVMDebugInfoBTF -lLLVMDebugInfoPDB -lLLVMDebugInfoMSF -lLLVMDebugInfoDWARF -lLLVMObject -lLLVMTextAPI -lLLVMMCParser -lLLVMIRReader -lLLVMAsmParser -lLLVMMC -lLLVMDebugInfoCodeView \
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ concurrency:

env:
CLANG_VERSION: 15.0.6
LLVM_VERSION: 18.1.8
LLVM_VERSION: 19.1.3

jobs:
build-native:
Expand Down Expand Up @@ -97,7 +97,7 @@ jobs:
- name: Install prerequisites
uses: ./.github/actions/1-setup
with:
clang_version: ${{ runner.os == 'Windows' && '18.1.8' || env.CLANG_VERSION }}
clang_version: ${{ runner.os == 'Windows' && '19.1.3' || env.CLANG_VERSION }}
llvm_version: ${{ matrix.llvm_version || env.LLVM_VERSION }}
arch: ${{ matrix.arch }}
- name: Build bootstrap LDC
Expand Down
12 changes: 5 additions & 7 deletions cmake/Modules/FindLLVM.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
# We also want an user-specified LLVM_ROOT_DIR to take precedence over the
# system default locations such as /usr/local/bin. Executing find_program()
# multiples times is the approach recommended in the docs.
set(llvm_config_names llvm-config-18.1 llvm-config181 llvm-config-18
set(llvm_config_names llvm-config-19.1 llvm-config191 llvm-config-19
llvm-config-18.1 llvm-config181 llvm-config-18
llvm-config-17.0 llvm-config170 llvm-config-17
llvm-config-16.0 llvm-config160 llvm-config-16
llvm-config-15.0 llvm-config150 llvm-config-15
Expand All @@ -46,9 +47,11 @@ if(APPLE)
# extra fallbacks for MacPorts & Homebrew
find_program(LLVM_CONFIG
NAMES ${llvm_config_names}
PATHS /opt/local/libexec/llvm-18/bin /opt/local/libexec/llvm-17/bin
PATHS /opt/local/libexec/llvm-19/bin
/opt/local/libexec/llvm-18/bin /opt/local/libexec/llvm-17/bin
/opt/local/libexec/llvm-16/bin /opt/local/libexec/llvm-15/bin
/opt/local/libexec/llvm/bin
/usr/local/opt/llvm@19/bin
/usr/local/opt/llvm@18/bin /usr/local/opt/llvm@17/bin
/usr/local/opt/llvm@16/bin /usr/local/opt/llvm@15/bin
/usr/local/opt/llvm/bin
Expand Down Expand Up @@ -138,11 +141,6 @@ else()
string(REPLACE "-llibxml2.tbd" "-lxml2" LLVM_LDFLAGS ${LLVM_LDFLAGS})
endif()

if(${LLVM_VERSION_MAJOR} LESS "15")
# Versions below 15.0 do not support component windowsdriver
list(REMOVE_ITEM LLVM_FIND_COMPONENTS "windowsdriver")
endif()

llvm_set(LIBRARY_DIRS libdir true)
llvm_set_libs(LIBRARIES libs "${LLVM_FIND_COMPONENTS}")
# LLVM bug: llvm-config --libs tablegen returns -lLLVM-3.8.0
Expand Down
2 changes: 1 addition & 1 deletion gen/arrays.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1071,7 +1071,7 @@ static void emitRangeErrorImpl(IRState *irs, const Loc &loc,
DtoCAssert(module, loc, DtoConstCString(cAssertMsg));
break;
case CHECKACTION_halt:
irs->ir->CreateCall(GET_INTRINSIC_DECL(trap), {});
irs->ir->CreateCall(GET_INTRINSIC_DECL(trap, {}), {});
irs->ir->CreateUnreachable();
break;
case CHECKACTION_context:
Expand Down
11 changes: 11 additions & 0 deletions gen/dcompute/targetOCL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <string>

// from SPIRVInternal.h
#if LDC_LLVM_VER < 1900
#define SPIR_TARGETTRIPLE32 "spir-unknown-unknown"
#define SPIR_TARGETTRIPLE64 "spir64-unknown-unknown"
#define SPIR_DATALAYOUT32 \
Expand All @@ -38,6 +39,16 @@
"-v32:32:32-v48:64:64-v64:64:64-v96:128:128" \
"-v128:128:128-v192:256:256-v256:256:256" \
"-v512:512:512-v1024:1024:1024"
#else
#define SPIR_TARGETTRIPLE32 "spirv-unknown-unknown"
#define SPIR_TARGETTRIPLE64 "spirv64-unknown-unknown"
#define SPIR_DATALAYOUT32 \
"e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64" \
"-v96:128-v192:256-v256:256-v512:512-v1024:1024-G1"
#define SPIR_DATALAYOUT64 \
"e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128" \
"-v192:256-v256:256-v512:512-v1024:1024-G1"
#endif
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@thewilsonator: Please take a look.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@thewilsonator: Is your approval a definitive this-is-OK, or rather a I-guess-it's-OK? :) - Just wondering wrt. #4772 (comment), the missing n parts that clang uses.


using namespace dmd;

Expand Down
7 changes: 5 additions & 2 deletions gen/dibuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1137,10 +1137,13 @@ void DIBuilder::EmitValue(llvm::Value *val, VarDeclaration *vd) {
if (!mustEmitFullDebugInfo() || !debugVariable)
return;

llvm::Instruction *instr = DBuilder.insertDbgValueIntrinsic(
auto instr = DBuilder.insertDbgValueIntrinsic(
val, debugVariable, DBuilder.createExpression(),
IR->ir->getCurrentDebugLocation(), IR->scopebb());
instr->setDebugLoc(IR->ir->getCurrentDebugLocation());
#if LDC_LLVM_VER >= 1900
llvm::cast<llvm::DbgRecord *>
#endif
(instr)->setDebugLoc(IR->ir->getCurrentDebugLocation());
}

void DIBuilder::EmitLocalVariable(llvm::Value *ll, VarDeclaration *vd,
Expand Down
4 changes: 2 additions & 2 deletions gen/functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1254,7 +1254,7 @@ void DtoDefineFunction(FuncDeclaration *fd, bool linkageAvailableExternally) {
// initialize _argptr with a call to the va_start intrinsic
DLValue argptrVal(tvalist, argptrMem);
LLValue *llAp = gABI->prepareVaStart(&argptrVal);
llvm::CallInst::Create(GET_INTRINSIC_DECL(vastart), llAp, "",
llvm::CallInst::Create(GET_INTRINSIC_DECL(vastart, llAp->getType()), llAp, "",
gIR->scopebb());

// copy _arguments to a memory location
Expand All @@ -1265,7 +1265,7 @@ void DtoDefineFunction(FuncDeclaration *fd, bool linkageAvailableExternally) {
auto *vaendBB = llvm::BasicBlock::Create(gIR->context(), "vaend", func);
const auto savedInsertPoint = gIR->saveInsertPoint();
gIR->ir->SetInsertPoint(vaendBB);
gIR->ir->CreateCall(GET_INTRINSIC_DECL(vaend), llAp);
gIR->ir->CreateCall(GET_INTRINSIC_DECL(vaend, llAp->getType()), llAp);
funcGen.scopes.pushCleanup(vaendBB, gIR->scopebb());
}
}
Expand Down
7 changes: 6 additions & 1 deletion gen/llvm.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,13 @@ using llvm::APFloat;
using llvm::APInt;
using llvm::IRBuilder;

#define GET_INTRINSIC_DECL(_X) \
#if LDC_LLVM_VER >= 1900
#define GET_INTRINSIC_DECL(_X, _TY) \
(llvm::Intrinsic::getDeclaration(&gIR->module, llvm::Intrinsic::_X, _TY))
#else
#define GET_INTRINSIC_DECL(_X, _TY) \
(llvm::Intrinsic::getDeclaration(&gIR->module, llvm::Intrinsic::_X))
#endif

// shortcuts for the common llvm types

Expand Down
9 changes: 9 additions & 0 deletions gen/optimizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,9 @@ static llvm::Optional<PGOOptions> getPGOOptions() {
"" /*MemoryProfileUsePath*/, llvm::vfs::getRealFileSystem(),
#endif
PGOOptions::PGOAction::IRInstr, PGOOptions::CSPGOAction::NoCSAction,
#if LDC_LLVM_VER >= 1900
PGOOptions::ColdFuncOpt::Default,
#endif
debugInfoForProfiling, pseudoProbeForProfiling);
} else if (opts::isUsingIRBasedPGOProfile()) {
return PGOOptions(
Expand All @@ -316,6 +319,9 @@ static llvm::Optional<PGOOptions> getPGOOptions() {
"" /*MemoryProfileUsePath*/, llvm::vfs::getRealFileSystem(),
#endif
PGOOptions::PGOAction::IRUse, PGOOptions::CSPGOAction::NoCSAction,
#if LDC_LLVM_VER >= 1900
PGOOptions::ColdFuncOpt::Default,
#endif
debugInfoForProfiling, pseudoProbeForProfiling);
} else if (opts::isUsingSampleBasedPGOProfile()) {
return PGOOptions(
Expand All @@ -324,6 +330,9 @@ static llvm::Optional<PGOOptions> getPGOOptions() {
"" /*MemoryProfileUsePath*/, llvm::vfs::getRealFileSystem(),
#endif
PGOOptions::PGOAction::SampleUse, PGOOptions::CSPGOAction::NoCSAction,
#if LDC_LLVM_VER >= 1900
PGOOptions::ColdFuncOpt::Default,
#endif
debugInfoForProfiling, pseudoProbeForProfiling);
}
#if LDC_LLVM_VER < 1600
Expand Down
4 changes: 2 additions & 2 deletions gen/pgo_ASTbased.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -909,7 +909,7 @@ void CodeGenPGO::emitCounterIncrement(const RootObject *S) const {
assert(counter_it != (*RegionCounterMap).end() &&
"Statement not found in PGO counter map!");
unsigned counter = counter_it->second;
gIR->ir->CreateCall(GET_INTRINSIC_DECL(instrprof_increment),
gIR->ir->CreateCall(GET_INTRINSIC_DECL(instrprof_increment, {}),
{FuncNameVar, gIR->ir->getInt64(FunctionHash),
gIR->ir->getInt32(NumRegionCounters),
gIR->ir->getInt32(counter)});
Expand Down Expand Up @@ -1118,7 +1118,7 @@ void CodeGenPGO::valueProfile(uint32_t valueKind, llvm::Instruction *valueSite,
llvm::Value *Args[5] = {FuncNameVar, gIR->ir->getInt64(FunctionHash), value,
gIR->ir->getInt32(valueKind),
gIR->ir->getInt32(NumValueSites[valueKind])};
gIR->ir->CreateCall(GET_INTRINSIC_DECL(instrprof_value_profile), Args);
gIR->ir->CreateCall(GET_INTRINSIC_DECL(instrprof_value_profile, {}), Args);

gIR->ir->restoreIP(savedInsertPoint);

Expand Down
2 changes: 1 addition & 1 deletion gen/runtime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,7 @@ static void emitInstrumentationFn(const char *name) {

// Grab the address of the calling function
auto *caller =
gIR->ir->CreateCall(GET_INTRINSIC_DECL(returnaddress), DtoConstInt(0));
gIR->ir->CreateCall(GET_INTRINSIC_DECL(returnaddress, {}), DtoConstInt(0));
auto callee = gIR->topfunc();

gIR->ir->CreateCall(fn, {callee, caller});
Expand Down
4 changes: 2 additions & 2 deletions gen/tocall.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ bool DtoLowerMagicIntrinsic(IRState *p, FuncDeclaration *fndecl, CallExp *e,
gABI->vaCopy(ap, &argptr);
} else {
LLValue *llAp = gABI->prepareVaStart(ap);
p->ir->CreateCall(GET_INTRINSIC_DECL(vastart), llAp, "");
p->ir->CreateCall(GET_INTRINSIC_DECL(vastart, llAp->getType()), llAp, "");
}
result = nullptr;
return true;
Expand Down Expand Up @@ -321,7 +321,7 @@ bool DtoLowerMagicIntrinsic(IRState *p, FuncDeclaration *fndecl, CallExp *e,
DLValue *ap = toElem((*e->arguments)[0])->isLVal(); // va_list
assert(ap);
LLValue *llAp = gABI->prepareVaArg(ap);
p->ir->CreateCall(GET_INTRINSIC_DECL(vaend), llAp);
p->ir->CreateCall(GET_INTRINSIC_DECL(vaend, llAp->getType()), llAp);
result = nullptr;
return true;
}
Expand Down
6 changes: 3 additions & 3 deletions gen/toir.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -809,7 +809,7 @@ class ToElemVisitor : public Visitor {
// access to the type of the class to do a GEP).
auto vtable = DtoLoad(dfnval->vtable->getType(), dfnval->vthis);
auto cmp = p->ir->CreateICmpEQ(vtable, dfnval->vtable);
p->ir->CreateCall(GET_INTRINSIC_DECL(assume), {cmp});
p->ir->CreateCall(GET_INTRINSIC_DECL(assume, {}), {cmp});
}

if (delayedDtorVar) {
Expand Down Expand Up @@ -1766,7 +1766,7 @@ class ToElemVisitor : public Visitor {
p->ir->SetInsertPoint(failedbb);

if (global.params.checkAction == CHECKACTION_halt) {
p->ir->CreateCall(GET_INTRINSIC_DECL(trap), {});
p->ir->CreateCall(GET_INTRINSIC_DECL(trap, {}), {});
p->ir->CreateUnreachable();
} else {
/* DMD Bugzilla 8360: If the condition is evaluated to true,
Expand Down Expand Up @@ -1923,7 +1923,7 @@ class ToElemVisitor : public Visitor {
IF_LOG Logger::print("HaltExp::toElem: %s\n", e->toChars());
LOG_SCOPE;

p->ir->CreateCall(GET_INTRINSIC_DECL(trap), {});
p->ir->CreateCall(GET_INTRINSIC_DECL(trap, {}), {});
p->ir->CreateUnreachable();

// this terminated the basicblock, start a new one
Expand Down
2 changes: 1 addition & 1 deletion gen/trycatchfinally.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ llvm::BasicBlock *TryCatchFinallyScopes::emitLandingPad() {
// "Call" llvm.eh.typeid.for, which gives us the eh selector value to
// compare the landing pad selector value with.
llvm::Value *ehTypeId = irs.ir->CreateCall(
GET_INTRINSIC_DECL(eh_typeid_for), cb.classInfoPtr);
GET_INTRINSIC_DECL(eh_typeid_for, cb.classInfoPtr->getType()), cb.classInfoPtr);

// Compare the selector value from the unwinder against the expected
// one and branch accordingly.
Expand Down
2 changes: 2 additions & 0 deletions runtime/druntime/src/ldc/intrinsics.di
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ else version (LDC_LLVM_1600) enum LLVM_version = 1600;
else version (LDC_LLVM_1700) enum LLVM_version = 1700;
else version (LDC_LLVM_1800) enum LLVM_version = 1800;
else version (LDC_LLVM_1801) enum LLVM_version = 1801;
else version (LDC_LLVM_1901) enum LLVM_version = 1901;
else version (LDC_LLVM_2000) enum LLVM_version = 2000;
else static assert(false, "LDC LLVM version not supported");

enum LLVM_atleast(int major) = (LLVM_version >= major * 100);
Expand Down
2 changes: 1 addition & 1 deletion tests/codegen/simd_alignment.d
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ S17237 globalStruct;
// CHECK-LABEL: define <8 x i32> @foo(
extern(C) int8 foo(S17237* s)
{
// CHECK: %[[GEP:[0-9]]] = getelementptr {{.*}}S17237, ptr %s_arg
// CHECK: %[[GEP:[0-9]]] = getelementptr {{(.*S17237|inbounds i8)}}, ptr %s_arg
// CHECK: = load <8 x i32>, ptr %[[GEP]], align 32
return s.c;
}
6 changes: 3 additions & 3 deletions tests/codegen/vastart_vaend_gh1744.d
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ module mod;
// OPT3-LABEL: define {{.*}} @{{.*}}void_three_return_paths
void void_three_return_paths(int a, ...)
{
// OPT3: call void @llvm.va_start({{.*}} %[[VA:[_0-9a-zA-Z]+]])
// OPT3: call void @llvm.va_start{{(\.p0)?}}({{.*}} %[[VA:[_0-9a-zA-Z]+]])
// OPT3-NOT: return_two
return_two();

Expand All @@ -24,8 +24,8 @@ void void_three_return_paths(int a, ...)

// There are two control paths (normal return, exception resume) that
// should call va_end.
// OPT3: call void @llvm.va_end({{.*}} %[[VA]])
// OPT3: call void @llvm.va_end({{.*}} %[[VA]])
// OPT3: call void @llvm.va_end{{(\.p0)?}}({{.*}} %[[VA]])
// OPT3: call void @llvm.va_end{{(\.p0)?}}({{.*}} %[[VA]])
}

// OPT3-LABEL: define {{.*}} @{{.*}}return_two
Expand Down
2 changes: 1 addition & 1 deletion tests/codegen/xtensa.d
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// REQUIRES: target_Xtensa

// RUN: %ldc -mtriple=xtensa -betterC
// RUN: %ldc -mtriple=xtensa -betterC %s -c -of=%t.o

version (Xtensa) {} else static assert(0);

2 changes: 1 addition & 1 deletion tests/lit.site.cfg.in
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ config.available_features.add("llvm%d" % config.llvm_version)
# config.llvm_version: 309, 400, 500, ...
# plusoneable_llvmversion: 39, 40, 50, ...
plusoneable_llvmversion = config.llvm_version // 10 + config.llvm_version%10
for version in range(140, plusoneable_llvmversion+1):
for version in range(150, plusoneable_llvmversion+1):
config.available_features.add("atleast_llvm%d0%d" % (version//10, version%10))
for version in range(plusoneable_llvmversion, 201):
config.available_features.add("atmost_llvm%d0%d" % (version//10, version%10))
Expand Down
Loading