Skip to content

Commit f23e70b

Browse files
committed
merge main into amd-staging
2 parents 432cf6b + 8e61aae commit f23e70b

File tree

104 files changed

+1150
-351
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+1150
-351
lines changed

bolt/lib/RuntimeLibs/RuntimeLibrary.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "llvm/Object/Archive.h"
1919
#include "llvm/Object/ObjectFile.h"
2020
#include "llvm/Support/Path.h"
21+
#include "llvm/Support/Program.h"
2122

2223
#define DEBUG_TYPE "bolt-rtlib"
2324

@@ -38,6 +39,23 @@ std::string RuntimeLibrary::getLibPathByToolPath(StringRef ToolPath,
3839
llvm::sys::path::append(LibPath, "lib" LLVM_LIBDIR_SUFFIX);
3940
}
4041
llvm::sys::path::append(LibPath, LibFileName);
42+
if (!llvm::sys::fs::exists(LibPath)) {
43+
// If it is a symlink, check the directory that the symlink points to.
44+
if (llvm::sys::fs::is_symlink_file(ToolPath)) {
45+
SmallString<256> RealPath;
46+
llvm::sys::fs::real_path(ToolPath, RealPath);
47+
if (llvm::ErrorOr<std::string> P =
48+
llvm::sys::findProgramByName(RealPath)) {
49+
outs() << "BOLT-INFO: library not found: " << LibPath << "\n"
50+
<< "BOLT-INFO: " << ToolPath << " is a symlink; will look up "
51+
<< LibFileName
52+
<< " at the target directory that the symlink points to\n";
53+
return getLibPath(*P, LibFileName);
54+
}
55+
}
56+
errs() << "BOLT-ERROR: library not found: " << LibPath << "\n";
57+
exit(1);
58+
}
4159
return std::string(LibPath);
4260
}
4361

clang/docs/UsersManual.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3125,6 +3125,24 @@ indexed format, regardeless whether it is produced by frontend or the IR pass.
31253125
overhead. ``prefer-atomic`` will be transformed to ``atomic`` when supported
31263126
by the target, or ``single`` otherwise.
31273127

3128+
.. option:: -fprofile-continuous
3129+
3130+
Enables the continuous instrumentation profiling where profile counter updates
3131+
are continuously synced to a file. This option sets any neccessary modifiers
3132+
(currently ``%c``) in the default profile filename and passes any necessary
3133+
flags to the middle-end to support this mode. Value profiling is not supported
3134+
in continuous mode.
3135+
3136+
.. code-block:: console
3137+
3138+
$ clang++ -O2 -fprofile-generate -fprofile-continuous code.cc -o code
3139+
3140+
Running ``./code`` will collect the profile and write it to the
3141+
``default_xxxx.profraw`` file. However, if ``./code`` abruptly terminates or
3142+
does not call ``exit()``, in continuous mode the profile collected up to the
3143+
point of termination will be available in ``default_xxxx.profraw`` while in
3144+
the non-continuous mode, no profile file is generated.
3145+
31283146
.. option:: -ftemporal-profile
31293147

31303148
Enables the temporal profiling extension for IRPGO to improve startup time by

clang/include/clang/Basic/CodeGenOptions.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ AFFECTING_VALUE_CODEGENOPT(OptimizationLevel, 2, 0) ///< The -O[0-3] option spec
221221
AFFECTING_VALUE_CODEGENOPT(OptimizeSize, 2, 0) ///< If -Os (==1) or -Oz (==2) is specified.
222222

223223
CODEGENOPT(AtomicProfileUpdate , 1, 0) ///< Set -fprofile-update=atomic
224+
CODEGENOPT(ContinuousProfileSync, 1, 0) ///< Enable continuous instrumentation profiling
224225
/// Choose profile instrumenation kind or no instrumentation.
225226
ENUM_CODEGENOPT(ProfileInstr, ProfileInstrKind, 2, ProfileNone)
226227
/// Choose profile kind for PGO use compilation.

clang/include/clang/Driver/Options.td

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1801,6 +1801,11 @@ def fprofile_update_EQ : Joined<["-"], "fprofile-update=">,
18011801
Values<"atomic,prefer-atomic,single">,
18021802
MetaVarName<"<method>">, HelpText<"Set update method of profile counters">,
18031803
MarshallingInfoFlag<CodeGenOpts<"AtomicProfileUpdate">>;
1804+
def fprofile_continuous : Flag<["-"], "fprofile-continuous">,
1805+
Group<f_Group>, Visibility<[ClangOption, CC1Option]>,
1806+
HelpText<"Enable continuous instrumentation profiling mode">,
1807+
MarshallingInfoFlag<CodeGenOpts<"ContinuousProfileSync">>;
1808+
18041809
defm pseudo_probe_for_profiling : BoolFOption<"pseudo-probe-for-profiling",
18051810
CodeGenOpts<"PseudoProbeForProfiling">, DefaultFalse,
18061811
PosFlag<SetTrue, [], [ClangOption], "Emit">,

clang/lib/AST/ByteCode/Program.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@ using namespace clang;
1818
using namespace clang::interp;
1919

2020
unsigned Program::getOrCreateNativePointer(const void *Ptr) {
21-
auto It = NativePointerIndices.find(Ptr);
22-
if (It != NativePointerIndices.end())
23-
return It->second;
21+
auto [It, Inserted] =
22+
NativePointerIndices.try_emplace(Ptr, NativePointers.size());
23+
if (Inserted)
24+
NativePointers.push_back(Ptr);
2425

25-
unsigned Idx = NativePointers.size();
26-
NativePointers.push_back(Ptr);
27-
NativePointerIndices[Ptr] = Idx;
28-
return Idx;
26+
return It->second;
2927
}
3028

3129
const void *Program::getNativePointer(unsigned Idx) {

clang/lib/Analysis/UninitializedValues.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,10 @@ void ClassifyRefs::classify(const Expr *E, Class C) {
379379
}
380380

381381
FindVarResult Var = findVar(E, DC);
382-
if (const DeclRefExpr *DRE = Var.getDeclRefExpr())
383-
Classification[DRE] = std::max(Classification[DRE], C);
382+
if (const DeclRefExpr *DRE = Var.getDeclRefExpr()) {
383+
auto &Class = Classification[DRE];
384+
Class = std::max(Class, C);
385+
}
384386
}
385387

386388
void ClassifyRefs::VisitDeclStmt(DeclStmt *DS) {

clang/lib/CodeGen/Address.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,7 @@ class Address {
197197

198198
/// Return the type of the pointer value.
199199
llvm::PointerType *getType() const {
200-
return llvm::PointerType::get(
201-
ElementType,
202-
llvm::cast<llvm::PointerType>(Pointer.getPointer()->getType())
203-
->getAddressSpace());
200+
return llvm::cast<llvm::PointerType>(Pointer.getPointer()->getType());
204201
}
205202

206203
/// Return the type of the values stored in this address.

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,25 @@ namespace clang {
124124
extern llvm::cl::opt<bool> ClSanitizeGuardChecks;
125125
}
126126

127-
namespace {
128-
129127
// Default filename used for profile generation.
130-
std::string getDefaultProfileGenName() {
128+
static std::string getDefaultProfileGenName() {
131129
return DebugInfoCorrelate || ProfileCorrelate != InstrProfCorrelator::NONE
132130
? "default_%m.proflite"
133131
: "default_%m.profraw";
134132
}
135133

134+
// Path and name of file used for profile generation
135+
static std::string getProfileGenName(const CodeGenOptions &CodeGenOpts) {
136+
std::string FileName = CodeGenOpts.InstrProfileOutput.empty()
137+
? getDefaultProfileGenName()
138+
: CodeGenOpts.InstrProfileOutput;
139+
if (CodeGenOpts.ContinuousProfileSync)
140+
FileName = "%c" + FileName;
141+
return FileName;
142+
}
143+
144+
namespace {
145+
136146
class EmitAssemblyHelper {
137147
CompilerInstance &CI;
138148
DiagnosticsEngine &Diags;
@@ -551,7 +561,9 @@ getInstrProfOptions(const CodeGenOptions &CodeGenOpts,
551561
return std::nullopt;
552562
InstrProfOptions Options;
553563
Options.NoRedZone = CodeGenOpts.DisableRedZone;
554-
Options.InstrProfileOutput = CodeGenOpts.InstrProfileOutput;
564+
Options.InstrProfileOutput = CodeGenOpts.ContinuousProfileSync
565+
? ("%c" + CodeGenOpts.InstrProfileOutput)
566+
: CodeGenOpts.InstrProfileOutput;
555567
Options.Atomic = CodeGenOpts.AtomicProfileUpdate;
556568
return Options;
557569
}
@@ -822,13 +834,12 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
822834

823835
if (CodeGenOpts.hasProfileIRInstr())
824836
// -fprofile-generate.
825-
PGOOpt = PGOOptions(
826-
CodeGenOpts.InstrProfileOutput.empty() ? getDefaultProfileGenName()
827-
: CodeGenOpts.InstrProfileOutput,
828-
"", "", CodeGenOpts.MemoryProfileUsePath, nullptr, PGOOptions::IRInstr,
829-
PGOOptions::NoCSAction, ClPGOColdFuncAttr,
830-
CodeGenOpts.DebugInfoForProfiling,
831-
/*PseudoProbeForProfiling=*/false, CodeGenOpts.AtomicProfileUpdate);
837+
PGOOpt = PGOOptions(getProfileGenName(CodeGenOpts), "", "",
838+
CodeGenOpts.MemoryProfileUsePath, nullptr,
839+
PGOOptions::IRInstr, PGOOptions::NoCSAction,
840+
ClPGOColdFuncAttr, CodeGenOpts.DebugInfoForProfiling,
841+
/*PseudoProbeForProfiling=*/false,
842+
CodeGenOpts.AtomicProfileUpdate);
832843
else if (CodeGenOpts.hasProfileIRUse()) {
833844
// -fprofile-use.
834845
auto CSAction = CodeGenOpts.hasProfileCSIRUse() ? PGOOptions::CSIRUse
@@ -872,18 +883,13 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
872883
PGOOpt->Action != PGOOptions::SampleUse &&
873884
"Cannot run CSProfileGen pass with ProfileGen or SampleUse "
874885
" pass");
875-
PGOOpt->CSProfileGenFile = CodeGenOpts.InstrProfileOutput.empty()
876-
? getDefaultProfileGenName()
877-
: CodeGenOpts.InstrProfileOutput;
886+
PGOOpt->CSProfileGenFile = getProfileGenName(CodeGenOpts);
878887
PGOOpt->CSAction = PGOOptions::CSIRInstr;
879888
} else
880-
PGOOpt = PGOOptions("",
881-
CodeGenOpts.InstrProfileOutput.empty()
882-
? getDefaultProfileGenName()
883-
: CodeGenOpts.InstrProfileOutput,
884-
"", /*MemoryProfile=*/"", nullptr,
885-
PGOOptions::NoAction, PGOOptions::CSIRInstr,
886-
ClPGOColdFuncAttr, CodeGenOpts.DebugInfoForProfiling);
889+
PGOOpt = PGOOptions("", getProfileGenName(CodeGenOpts), "",
890+
/*MemoryProfile=*/"", nullptr, PGOOptions::NoAction,
891+
PGOOptions::CSIRInstr, ClPGOColdFuncAttr,
892+
CodeGenOpts.DebugInfoForProfiling);
887893
}
888894
if (TM)
889895
TM->setPGOOption(PGOOpt);

clang/lib/CodeGen/CGBlocks.cpp

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,31 +1097,10 @@ llvm::Type *CodeGenModule::getBlockDescriptorType() {
10971097
if (BlockDescriptorType)
10981098
return BlockDescriptorType;
10991099

1100-
llvm::Type *UnsignedLongTy =
1101-
getTypes().ConvertType(getContext().UnsignedLongTy);
1102-
1103-
// struct __block_descriptor {
1104-
// unsigned long reserved;
1105-
// unsigned long block_size;
1106-
//
1107-
// // later, the following will be added
1108-
//
1109-
// struct {
1110-
// void (*copyHelper)();
1111-
// void (*copyHelper)();
1112-
// } helpers; // !!! optional
1113-
//
1114-
// const char *signature; // the block signature
1115-
// const char *layout; // reserved
1116-
// };
1117-
BlockDescriptorType = llvm::StructType::create(
1118-
"struct.__block_descriptor", UnsignedLongTy, UnsignedLongTy);
1119-
1120-
// Now form a pointer to that.
11211100
unsigned AddrSpace = 0;
11221101
if (getLangOpts().OpenCL)
11231102
AddrSpace = getContext().getTargetAddressSpace(LangAS::opencl_constant);
1124-
BlockDescriptorType = llvm::PointerType::get(BlockDescriptorType, AddrSpace);
1103+
BlockDescriptorType = llvm::PointerType::get(getLLVMContext(), AddrSpace);
11251104
return BlockDescriptorType;
11261105
}
11271106

clang/lib/CodeGen/CGDecl.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2894,15 +2894,12 @@ void CodeGenModule::EmitOMPAllocateDecl(const OMPAllocateDecl *D) {
28942894

28952895
// We can also keep the existing global if the address space is what we
28962896
// expect it to be, if not, it is replaced.
2897-
QualType ASTTy = VD->getType();
28982897
clang::LangAS GVAS = GetGlobalVarAddressSpace(VD);
28992898
auto TargetAS = getContext().getTargetAddressSpace(GVAS);
29002899
if (Entry->getType()->getAddressSpace() == TargetAS)
29012900
continue;
29022901

2903-
// Make a new global with the correct type / address space.
2904-
llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy);
2905-
llvm::PointerType *PTy = llvm::PointerType::get(Ty, TargetAS);
2902+
llvm::PointerType *PTy = llvm::PointerType::get(getLLVMContext(), TargetAS);
29062903

29072904
// Replace all uses of the old global with a cast. Since we mutate the type
29082905
// in place we neeed an intermediate that takes the spot of the old entry
@@ -2915,8 +2912,7 @@ void CodeGenModule::EmitOMPAllocateDecl(const OMPAllocateDecl *D) {
29152912

29162913
Entry->mutateType(PTy);
29172914
llvm::Constant *NewPtrForOldDecl =
2918-
llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast(
2919-
Entry, DummyGV->getType());
2915+
llvm::ConstantExpr::getAddrSpaceCast(Entry, DummyGV->getType());
29202916

29212917
// Now we have a casted version of the changed global, the dummy can be
29222918
// replaced and deleted.

clang/lib/CodeGen/CGDeclCXX.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -345,10 +345,7 @@ void CodeGenFunction::registerGlobalDtorWithLLVM(const VarDecl &VD,
345345

346346
void CodeGenFunction::registerGlobalDtorWithAtExit(llvm::Constant *dtorStub) {
347347
// extern "C" int atexit(void (*f)(void));
348-
assert(dtorStub->getType() ==
349-
llvm::PointerType::get(
350-
llvm::FunctionType::get(CGM.VoidTy, false),
351-
dtorStub->getType()->getPointerAddressSpace()) &&
348+
assert(dtorStub->getType()->isPointerTy() &&
352349
"Argument to atexit has a wrong type.");
353350

354351
llvm::FunctionType *atexitTy =
@@ -372,10 +369,7 @@ CodeGenFunction::unregisterGlobalDtorWithUnAtExit(llvm::Constant *dtorStub) {
372369
// value is returned.
373370
//
374371
// extern "C" int unatexit(void (*f)(void));
375-
assert(dtorStub->getType() ==
376-
llvm::PointerType::get(
377-
llvm::FunctionType::get(CGM.VoidTy, false),
378-
dtorStub->getType()->getPointerAddressSpace()) &&
372+
assert(dtorStub->getType()->isPointerTy() &&
379373
"Argument to unatexit has a wrong type.");
380374

381375
llvm::FunctionType *unatexitTy =

clang/lib/CodeGen/CGExpr.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
872872
llvm::Value *TypeHash =
873873
llvm::ConstantInt::get(Int64Ty, xxh3_64bits(Out.str()));
874874

875-
llvm::Type *VPtrTy = llvm::PointerType::get(IntPtrTy, 0);
875+
llvm::Type *VPtrTy = llvm::PointerType::get(getLLVMContext(), 0);
876876
Address VPtrAddr(Ptr, IntPtrTy, getPointerAlign());
877877
llvm::Value *VPtrVal = GetVTablePtr(VPtrAddr, VPtrTy,
878878
Ty->getAsCXXRecordDecl(),
@@ -3054,7 +3054,7 @@ LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
30543054
getContext().getDeclAlign(VD));
30553055
llvm::Type *VarTy = getTypes().ConvertTypeForMem(VD->getType());
30563056
auto *PTy = llvm::PointerType::get(
3057-
VarTy, getTypes().getTargetAddressSpace(VD->getType()));
3057+
getLLVMContext(), getTypes().getTargetAddressSpace(VD->getType()));
30583058
Addr = Builder.CreatePointerBitCastOrAddrSpaceCast(Addr, PTy, VarTy);
30593059
} else {
30603060
// Should we be using the alignment of the constant pointer we emitted?

clang/lib/CodeGen/CGObjCMac.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5717,7 +5717,7 @@ ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
57175717
IntTy = CGM.IntTy;
57185718
LongTy = cast<llvm::IntegerType>(Types.ConvertType(Ctx.LongTy));
57195719
Int8PtrTy = CGM.Int8PtrTy;
5720-
Int8PtrProgramASTy = llvm::PointerType::get(CGM.Int8Ty, ProgramAS);
5720+
Int8PtrProgramASTy = llvm::PointerType::get(CGM.getLLVMContext(), ProgramAS);
57215721
Int8PtrPtrTy = CGM.Int8PtrPtrTy;
57225722

57235723
// arm64 targets use "int" ivar offset variables. All others,

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4445,7 +4445,7 @@ void CodeGenModule::emitCPUDispatchDefinition(GlobalDecl GD) {
44454445
GlobalDecl ResolverGD;
44464446
if (getTarget().supportsIFunc()) {
44474447
ResolverType = llvm::FunctionType::get(
4448-
llvm::PointerType::get(DeclTy,
4448+
llvm::PointerType::get(getLLVMContext(),
44494449
getTypes().getTargetAddressSpace(FD->getType())),
44504450
false);
44514451
}
@@ -4617,8 +4617,8 @@ llvm::Constant *CodeGenModule::GetOrCreateMultiVersionResolver(GlobalDecl GD) {
46174617
// cpu_dispatch will be emitted in this translation unit.
46184618
if (ShouldReturnIFunc) {
46194619
unsigned AS = getTypes().getTargetAddressSpace(FD->getType());
4620-
llvm::Type *ResolverType =
4621-
llvm::FunctionType::get(llvm::PointerType::get(DeclTy, AS), false);
4620+
llvm::Type *ResolverType = llvm::FunctionType::get(
4621+
llvm::PointerType::get(getLLVMContext(), AS), false);
46224622
llvm::Constant *Resolver = GetOrCreateLLVMFunction(
46234623
MangledName + ".resolver", ResolverType, GlobalDecl{},
46244624
/*ForVTable=*/false);

clang/lib/CodeGen/Targets/AArch64.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,7 @@ RValue AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr, QualType Ty,
843843

844844
llvm::Type *BaseTy = CGF.ConvertType(Ty);
845845
if (IsIndirect)
846-
BaseTy = llvm::PointerType::getUnqual(BaseTy);
846+
BaseTy = llvm::PointerType::getUnqual(BaseTy->getContext());
847847
else if (AI.getCoerceToType())
848848
BaseTy = AI.getCoerceToType();
849849

@@ -961,7 +961,7 @@ RValue AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr, QualType Ty,
961961
if (IsIndirect) {
962962
// If it's been passed indirectly (actually a struct), whatever we find from
963963
// stored registers or on the stack will actually be a struct **.
964-
MemTy = llvm::PointerType::getUnqual(MemTy);
964+
MemTy = llvm::PointerType::getUnqual(MemTy->getContext());
965965
}
966966

967967
const Type *Base = nullptr;

clang/lib/CodeGen/Targets/Hexagon.cpp

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,6 @@ Address HexagonABIInfo::EmitVAArgForHexagonLinux(CodeGenFunction &CGF,
336336
// Implement the block where argument is in register saved area
337337
CGF.EmitBlock(InRegBlock);
338338

339-
llvm::Type *PTy = CGF.ConvertType(Ty);
340-
llvm::Value *__saved_reg_area_p = CGF.Builder.CreateBitCast(
341-
__current_saved_reg_area_pointer, llvm::PointerType::getUnqual(PTy));
342-
343339
CGF.Builder.CreateStore(__new_saved_reg_area_pointer,
344340
__current_saved_reg_area_pointer_p);
345341

@@ -388,22 +384,16 @@ Address HexagonABIInfo::EmitVAArgForHexagonLinux(CodeGenFunction &CGF,
388384
CGF.Builder.CreateStore(__new_overflow_area_pointer,
389385
__current_saved_reg_area_pointer_p);
390386

391-
// Bitcast the overflow area pointer to the type of argument.
392-
llvm::Type *OverflowPTy = CGF.ConvertTypeForMem(Ty);
393-
llvm::Value *__overflow_area_p = CGF.Builder.CreateBitCast(
394-
__overflow_area_pointer, llvm::PointerType::getUnqual(OverflowPTy));
395-
396387
CGF.EmitBranch(ContBlock);
397-
398388
// Get the correct pointer to load the variable argument
399389
// Implement the ContBlock
400390
CGF.EmitBlock(ContBlock);
401391

402392
llvm::Type *MemTy = CGF.ConvertTypeForMem(Ty);
403-
llvm::Type *MemPTy = llvm::PointerType::getUnqual(MemTy);
404-
llvm::PHINode *ArgAddr = CGF.Builder.CreatePHI(MemPTy, 2, "vaarg.addr");
405-
ArgAddr->addIncoming(__saved_reg_area_p, InRegBlock);
406-
ArgAddr->addIncoming(__overflow_area_p, OnStackBlock);
393+
llvm::PHINode *ArgAddr = CGF.Builder.CreatePHI(
394+
llvm::PointerType::getUnqual(MemTy->getContext()), 2, "vaarg.addr");
395+
ArgAddr->addIncoming(__current_saved_reg_area_pointer, InRegBlock);
396+
ArgAddr->addIncoming(__overflow_area_pointer, OnStackBlock);
407397

408398
return Address(ArgAddr, MemTy, CharUnits::fromQuantity(ArgAlign));
409399
}

0 commit comments

Comments
 (0)