You've already forked linux-packaging-mono
Imported Upstream version 6.4.0.137
Former-commit-id: 943baa9f16a098c33e129777827f3a9d20da00d6
This commit is contained in:
parent
e9207cf623
commit
ef583813eb
2
external/llvm/CMakeLists.txt
vendored
2
external/llvm/CMakeLists.txt
vendored
@@ -30,7 +30,7 @@ if(NOT DEFINED LLVM_VERSION_SUFFIX)
|
||||
set(LLVM_VERSION_SUFFIX "")
|
||||
endif()
|
||||
|
||||
set(MONO_API_VERSION 600)
|
||||
set(MONO_API_VERSION 610)
|
||||
|
||||
if (NOT PACKAGE_VERSION)
|
||||
set(PACKAGE_VERSION
|
||||
|
3
external/llvm/include/llvm/CodeGen/GCs.h
vendored
3
external/llvm/include/llvm/CodeGen/GCs.h
vendored
@@ -24,6 +24,9 @@ class GCMetadataPrinter;
|
||||
/// Creates a CoreCLR-compatible garbage collector.
|
||||
void linkCoreCLRGC();
|
||||
|
||||
/// Creates a Mono-compatible garbage collector.
|
||||
void linkMonoGC();
|
||||
|
||||
/// Creates an ocaml-compatible garbage collector.
|
||||
void linkOcamlGC();
|
||||
|
||||
|
@@ -37,6 +37,7 @@ namespace {
|
||||
(void) llvm::createDefaultPBQPRegisterAllocator();
|
||||
|
||||
llvm::linkCoreCLRGC();
|
||||
llvm::linkMonoGC();
|
||||
llvm::linkOcamlGC();
|
||||
llvm::linkErlangGC();
|
||||
llvm::linkShadowStackGC();
|
||||
|
@@ -449,6 +449,13 @@ public:
|
||||
/// Replace successor OLD with NEW and update probability info.
|
||||
void replaceSuccessor(MachineBasicBlock *Old, MachineBasicBlock *New);
|
||||
|
||||
/// Copy a successor (and any probability info) from original block to this
|
||||
/// block's. Uses an iterator into the original blocks successors.
|
||||
///
|
||||
/// This is useful when doing a partial clone of successors. Afterward, the
|
||||
/// probabilities may need to be normalized.
|
||||
void copySuccessor(MachineBasicBlock *Orig, succ_iterator I);
|
||||
|
||||
/// Transfers all the successors from MBB to this machine basic block (i.e.,
|
||||
/// copies all the successors FromMBB and remove all the successors from
|
||||
/// FromMBB).
|
||||
|
@@ -36,8 +36,12 @@ let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.".
|
||||
|
||||
// Intrinsics used to generate ctr-based loops. These should only be
|
||||
// generated by the PowerPC backend!
|
||||
// The branch intrinsic is marked as NoDuplicate because loop rotation will
|
||||
// attempt to duplicate it forming loops where a block reachable from one
|
||||
// instance of it can contain another.
|
||||
def int_ppc_mtctr : Intrinsic<[], [llvm_anyint_ty], []>;
|
||||
def int_ppc_is_decremented_ctr_nonzero : Intrinsic<[llvm_i1_ty], [], []>;
|
||||
def int_ppc_is_decremented_ctr_nonzero :
|
||||
Intrinsic<[llvm_i1_ty], [], [IntrNoDuplicate]>;
|
||||
|
||||
// Intrinsics for [double]word extended forms of divide instructions
|
||||
def int_ppc_divwe : GCCBuiltin<"__builtin_divwe">,
|
||||
|
@@ -254,8 +254,7 @@ MonoException::~MonoException()
|
||||
void
|
||||
MonoException::beginFunction(const MachineFunction *MF)
|
||||
{
|
||||
if (DisableGNUEH && Asm->MAI->getExceptionHandlingType() == ExceptionHandling::ARM)
|
||||
static_cast<ARMTargetStreamer*>(Asm->OutStreamer->getTargetStreamer())->emitFnStart();
|
||||
EmitFnStart();
|
||||
EHLabels.clear();
|
||||
}
|
||||
|
||||
@@ -363,6 +362,20 @@ MonoException::PrepareMonoLSDA(EHInfo *info)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MonoException::EmitFnStart(void)
|
||||
{
|
||||
if (DisableGNUEH && Asm->MAI->getExceptionHandlingType() == ExceptionHandling::ARM)
|
||||
static_cast<ARMTargetStreamer*>(Asm->OutStreamer->getTargetStreamer())->emitFnStart();
|
||||
}
|
||||
|
||||
void
|
||||
MonoException::EmitFnEnd(void)
|
||||
{
|
||||
if (DisableGNUEH && Asm->MAI->getExceptionHandlingType() == ExceptionHandling::ARM)
|
||||
static_cast<ARMTargetStreamer*>(Asm->OutStreamer->getTargetStreamer())->emitFnEnd();
|
||||
}
|
||||
|
||||
void
|
||||
MonoException::endFunction(const MachineFunction *MF)
|
||||
{
|
||||
@@ -390,8 +403,10 @@ MonoException::endFunction(const MachineFunction *MF)
|
||||
|
||||
int monoMethodIdx = FuncIndexes.lookup (Asm->MF->getFunction ().getName ()) - 1;
|
||||
|
||||
if (monoMethodIdx == -1)
|
||||
if (monoMethodIdx == -1) {
|
||||
EmitFnEnd ();
|
||||
return;
|
||||
}
|
||||
|
||||
//outs () << "D: " << Asm->MF->getFunction()->getName() << " " << monoMethodIdx << "\n";
|
||||
|
||||
@@ -416,8 +431,7 @@ MonoException::endFunction(const MachineFunction *MF)
|
||||
Frames.push_back(info);
|
||||
EHLabels.clear();
|
||||
|
||||
if (DisableGNUEH && Asm->MAI->getExceptionHandlingType() == ExceptionHandling::ARM)
|
||||
static_cast<ARMTargetStreamer*>(Asm->OutStreamer->getTargetStreamer())->emitFnEnd();
|
||||
EmitFnEnd ();
|
||||
}
|
||||
|
||||
/// EmitMonoLSDA - Mono's version of EmitExceptionTable
|
||||
|
@@ -67,6 +67,8 @@ private:
|
||||
|
||||
void PrepareMonoLSDA(EHInfo *info);
|
||||
void EmitMonoLSDA(const EHInfo *info);
|
||||
void EmitFnStart();
|
||||
void EmitFnEnd();
|
||||
|
||||
std::vector<MCSymbol*> EHLabels;
|
||||
std::vector<EHInfo> Frames;
|
||||
|
16
external/llvm/lib/CodeGen/BuiltinGCs.cpp
vendored
16
external/llvm/lib/CodeGen/BuiltinGCs.cpp
vendored
@@ -122,6 +122,20 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/// A GCStrategy for the Mono Runtime.
|
||||
class MonoGC : public GCStrategy {
|
||||
public:
|
||||
MonoGC() {
|
||||
UseStatepoints = true;
|
||||
// These options are all gc.root specific, we specify them so that the
|
||||
// gc.root lowering code doesn't run.
|
||||
InitRoots = false;
|
||||
NeededSafePoints = 0;
|
||||
UsesMetadata = false;
|
||||
CustomRoots = false;
|
||||
}
|
||||
};
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
// Register all the above so that they can be found at runtime. Note that
|
||||
@@ -135,6 +149,7 @@ static GCRegistry::Add<ShadowStackGC>
|
||||
static GCRegistry::Add<StatepointGC> D("statepoint-example",
|
||||
"an example strategy for statepoint");
|
||||
static GCRegistry::Add<CoreCLRGC> E("coreclr", "CoreCLR-compatible GC");
|
||||
static GCRegistry::Add<MonoGC> F("mono", "Mono-compatible GC");
|
||||
|
||||
// Provide hooks to ensure the containing library is fully loaded.
|
||||
void llvm::linkErlangGC() {}
|
||||
@@ -142,3 +157,4 @@ void llvm::linkOcamlGC() {}
|
||||
void llvm::linkShadowStackGC() {}
|
||||
void llvm::linkStatepointExampleGC() {}
|
||||
void llvm::linkCoreCLRGC() {}
|
||||
void llvm::linkMonoGC() {}
|
||||
|
39
external/llvm/lib/CodeGen/IfConversion.cpp
vendored
39
external/llvm/lib/CodeGen/IfConversion.cpp
vendored
@@ -1714,20 +1714,25 @@ bool IfConverter::IfConvertDiamondCommon(
|
||||
}
|
||||
|
||||
// Remove the duplicated instructions at the beginnings of both paths.
|
||||
// Skip dbg_value instructions
|
||||
// Skip dbg_value instructions.
|
||||
MachineBasicBlock::iterator DI1 = MBB1.getFirstNonDebugInstr();
|
||||
MachineBasicBlock::iterator DI2 = MBB2.getFirstNonDebugInstr();
|
||||
BBI1->NonPredSize -= NumDups1;
|
||||
BBI2->NonPredSize -= NumDups1;
|
||||
|
||||
// Skip past the dups on each side separately since there may be
|
||||
// differing dbg_value entries.
|
||||
// differing dbg_value entries. NumDups1 can include a "return"
|
||||
// instruction, if it's not marked as "branch".
|
||||
for (unsigned i = 0; i < NumDups1; ++DI1) {
|
||||
if (DI1 == MBB1.end())
|
||||
break;
|
||||
if (!DI1->isDebugValue())
|
||||
++i;
|
||||
}
|
||||
while (NumDups1 != 0) {
|
||||
++DI2;
|
||||
if (DI2 == MBB2.end())
|
||||
break;
|
||||
if (!DI2->isDebugValue())
|
||||
--NumDups1;
|
||||
}
|
||||
@@ -1738,11 +1743,16 @@ bool IfConverter::IfConvertDiamondCommon(
|
||||
Redefs.stepForward(MI, Dummy);
|
||||
}
|
||||
}
|
||||
|
||||
BBI.BB->splice(BBI.BB->end(), &MBB1, MBB1.begin(), DI1);
|
||||
MBB2.erase(MBB2.begin(), DI2);
|
||||
|
||||
// The branches have been checked to match, so it is safe to remove the branch
|
||||
// in BB1 and rely on the copy in BB2
|
||||
// The branches have been checked to match, so it is safe to remove the
|
||||
// branch in BB1 and rely on the copy in BB2. The complication is that
|
||||
// the blocks may end with a return instruction, which may or may not
|
||||
// be marked as "branch". If it's not, then it could be included in
|
||||
// "dups1", leaving the blocks potentially empty after moving the common
|
||||
// duplicates.
|
||||
#ifndef NDEBUG
|
||||
// Unanalyzable branches must match exactly. Check that now.
|
||||
if (!BBI1->IsBrAnalyzable)
|
||||
@@ -1768,11 +1778,14 @@ bool IfConverter::IfConvertDiamondCommon(
|
||||
if (RemoveBranch)
|
||||
BBI2->NonPredSize -= TII->removeBranch(*BBI2->BB);
|
||||
else {
|
||||
do {
|
||||
assert(DI2 != MBB2.begin());
|
||||
DI2--;
|
||||
} while (DI2->isBranch() || DI2->isDebugValue());
|
||||
DI2++;
|
||||
// Make DI2 point to the end of the range where the common "tail"
|
||||
// instructions could be found.
|
||||
while (DI2 != MBB2.begin()) {
|
||||
MachineBasicBlock::iterator Prev = std::prev(DI2);
|
||||
if (!Prev->isBranch() && !Prev->isDebugValue())
|
||||
break;
|
||||
DI2 = Prev;
|
||||
}
|
||||
}
|
||||
while (NumDups2 != 0) {
|
||||
// NumDups2 only counted non-dbg_value instructions, so this won't
|
||||
@@ -1833,11 +1846,15 @@ bool IfConverter::IfConvertDiamondCommon(
|
||||
// a non-predicated in BBI2, then we don't want to predicate the one from
|
||||
// BBI2. The reason is that if we merged these blocks, we would end up with
|
||||
// two predicated terminators in the same block.
|
||||
// Also, if the branches in MBB1 and MBB2 were non-analyzable, then don't
|
||||
// predicate them either. They were checked to be identical, and so the
|
||||
// same branch would happen regardless of which path was taken.
|
||||
if (!MBB2.empty() && (DI2 == MBB2.end())) {
|
||||
MachineBasicBlock::iterator BBI1T = MBB1.getFirstTerminator();
|
||||
MachineBasicBlock::iterator BBI2T = MBB2.getFirstTerminator();
|
||||
if (BBI1T != MBB1.end() && TII->isPredicated(*BBI1T) &&
|
||||
BBI2T != MBB2.end() && !TII->isPredicated(*BBI2T))
|
||||
bool BB1Predicated = BBI1T != MBB1.end() && TII->isPredicated(*BBI1T);
|
||||
bool BB2NonPredicated = BBI2T != MBB2.end() && !TII->isPredicated(*BBI2T);
|
||||
if (BB2NonPredicated && (BB1Predicated || !BBI2->IsBrAnalyzable))
|
||||
--DI2;
|
||||
}
|
||||
|
||||
|
@@ -646,6 +646,14 @@ void MachineBasicBlock::replaceSuccessor(MachineBasicBlock *Old,
|
||||
removeSuccessor(OldI);
|
||||
}
|
||||
|
||||
void MachineBasicBlock::copySuccessor(MachineBasicBlock *Orig,
|
||||
succ_iterator I) {
|
||||
if (Orig->Probs.empty())
|
||||
addSuccessor(*I, Orig->getSuccProbability(I));
|
||||
else
|
||||
addSuccessorWithoutProb(*I);
|
||||
}
|
||||
|
||||
void MachineBasicBlock::addPredecessor(MachineBasicBlock *Pred) {
|
||||
Predecessors.push_back(Pred);
|
||||
}
|
||||
|
@@ -1 +1 @@
|
||||
84c808ee79384e97d654aaf92c19da99349d5089
|
||||
167135b56ec08d4c417c661972e2470f2d2270fc
|
@@ -1422,7 +1422,8 @@ RuntimeDyldELF::processRelocationRef(
|
||||
SectionEntry &Section = Sections[SectionID];
|
||||
uint8_t *Target = Section.getAddressWithOffset(Offset);
|
||||
bool RangeOverflow = false;
|
||||
if (!Value.SymbolName && SymType != SymbolRef::ST_Unknown) {
|
||||
bool IsExtern = Value.SymbolName || SymType == SymbolRef::ST_Unknown;
|
||||
if (!IsExtern) {
|
||||
if (AbiVariant != 2) {
|
||||
// In the ELFv1 ABI, a function call may point to the .opd entry,
|
||||
// so the final symbol value is calculated based on the relocation
|
||||
@@ -1432,21 +1433,24 @@ RuntimeDyldELF::processRelocationRef(
|
||||
} else {
|
||||
// In the ELFv2 ABI, a function symbol may provide a local entry
|
||||
// point, which must be used for direct calls.
|
||||
uint8_t SymOther = Symbol->getOther();
|
||||
Value.Addend += ELF::decodePPC64LocalEntryOffset(SymOther);
|
||||
if (Value.SectionID == SectionID){
|
||||
uint8_t SymOther = Symbol->getOther();
|
||||
Value.Addend += ELF::decodePPC64LocalEntryOffset(SymOther);
|
||||
}
|
||||
}
|
||||
uint8_t *RelocTarget =
|
||||
Sections[Value.SectionID].getAddressWithOffset(Value.Addend);
|
||||
int64_t delta = static_cast<int64_t>(Target - RelocTarget);
|
||||
// If it is within 26-bits branch range, just set the branch target
|
||||
if (SignExtend64<26>(delta) == delta) {
|
||||
if (SignExtend64<26>(delta) != delta) {
|
||||
RangeOverflow = true;
|
||||
} else if ((AbiVariant != 2) ||
|
||||
(AbiVariant == 2 && Value.SectionID == SectionID)) {
|
||||
RelocationEntry RE(SectionID, Offset, RelType, Value.Addend);
|
||||
addRelocationForSection(RE, Value.SectionID);
|
||||
} else {
|
||||
RangeOverflow = true;
|
||||
}
|
||||
}
|
||||
if (Value.SymbolName || SymType == SymbolRef::ST_Unknown ||
|
||||
if (IsExtern || (AbiVariant == 2 && Value.SectionID != SectionID) ||
|
||||
RangeOverflow) {
|
||||
// It is an external symbol (either Value.SymbolName is set, or
|
||||
// SymType is SymbolRef::ST_Unknown) or out of range.
|
||||
@@ -1503,10 +1507,10 @@ RuntimeDyldELF::processRelocationRef(
|
||||
RelType, 0);
|
||||
Section.advanceStubOffset(getMaxStubSize());
|
||||
}
|
||||
if (Value.SymbolName || SymType == SymbolRef::ST_Unknown) {
|
||||
if (IsExtern || (AbiVariant == 2 && Value.SectionID != SectionID)) {
|
||||
// Restore the TOC for external calls
|
||||
if (AbiVariant == 2)
|
||||
writeInt32BE(Target + 4, 0xE8410018); // ld r2,28(r1)
|
||||
writeInt32BE(Target + 4, 0xE8410018); // ld r2,24(r1)
|
||||
else
|
||||
writeInt32BE(Target + 4, 0xE8410028); // ld r2,40(r1)
|
||||
}
|
||||
|
2
external/llvm/lib/IR/Core.cpp.REMOVED.git-id
vendored
2
external/llvm/lib/IR/Core.cpp.REMOVED.git-id
vendored
@@ -1 +1 @@
|
||||
d3c33edec18678ed71afabbb48c58ea7cf935cd9
|
||||
743e3710fd68217eb6053cdcfb0d36bee2993927
|
2
external/llvm/lib/MC/MCObjectFileInfo.cpp
vendored
2
external/llvm/lib/MC/MCObjectFileInfo.cpp
vendored
@@ -289,6 +289,8 @@ void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) {
|
||||
case Triple::mips64el:
|
||||
FDECFIEncoding = dwarf::DW_EH_PE_sdata8;
|
||||
break;
|
||||
case Triple::ppc64:
|
||||
case Triple::ppc64le:
|
||||
case Triple::x86_64:
|
||||
FDECFIEncoding = dwarf::DW_EH_PE_pcrel |
|
||||
(Large ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4);
|
||||
|
9
external/llvm/lib/Support/CMakeLists.txt
vendored
9
external/llvm/lib/Support/CMakeLists.txt
vendored
@@ -13,8 +13,13 @@ elseif( CMAKE_HOST_UNIX )
|
||||
if( HAVE_LIBDL )
|
||||
set(system_libs ${system_libs} ${CMAKE_DL_LIBS})
|
||||
endif()
|
||||
if( HAVE_BACKTRACE )
|
||||
set(system_libs ${system_libs} ${Backtrace_LIBRARIES})
|
||||
if( HAVE_BACKTRACE AND NOT "${Backtrace_LIBRARIES}" STREQUAL "" )
|
||||
# On BSDs, CMake returns a fully qualified path to the backtrace library.
|
||||
# We need to remove the path and the 'lib' prefix, to make it look like a
|
||||
# regular short library name, suitable for appending to a -l link flag.
|
||||
get_filename_component(Backtrace_LIBFILE ${Backtrace_LIBRARIES} NAME_WE)
|
||||
STRING(REGEX REPLACE "^lib" "" Backtrace_LIBFILE ${Backtrace_LIBFILE})
|
||||
set(system_libs ${system_libs} ${Backtrace_LIBFILE})
|
||||
endif()
|
||||
if(LLVM_ENABLE_TERMINFO)
|
||||
if(HAVE_TERMINFO)
|
||||
|
@@ -299,6 +299,11 @@ void AArch64AsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNum,
|
||||
printOffset(MO.getOffset(), O);
|
||||
break;
|
||||
}
|
||||
case MachineOperand::MO_BlockAddress: {
|
||||
MCSymbol *Sym = GetBlockAddressSymbol(MO.getBlockAddress());
|
||||
Sym->print(O, MAI);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -46,6 +46,7 @@
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/DebugCounter.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <cassert>
|
||||
#include <iterator>
|
||||
@@ -60,6 +61,8 @@ STATISTIC(NumCollisionsAvoided,
|
||||
"Number of HW prefetch tag collisions avoided");
|
||||
STATISTIC(NumCollisionsNotAvoided,
|
||||
"Number of HW prefetch tag collisions not avoided due to lack of regsiters");
|
||||
DEBUG_COUNTER(FixCounter, "falkor-hwpf",
|
||||
"Controls which tag collisions are avoided");
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -729,6 +732,21 @@ void FalkorHWPFFix::runOnLoop(MachineLoop &L, MachineFunction &Fn) {
|
||||
bool Fixed = false;
|
||||
DEBUG(dbgs() << "Attempting to fix tag collision: " << MI);
|
||||
|
||||
if (!DebugCounter::shouldExecute(FixCounter)) {
|
||||
DEBUG(dbgs() << "Skipping fix due to debug counter:\n " << MI);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add the non-base registers of MI as live so we don't use them as
|
||||
// scratch registers.
|
||||
for (unsigned OpI = 0, OpE = MI.getNumOperands(); OpI < OpE; ++OpI) {
|
||||
if (OpI == static_cast<unsigned>(LdI.BaseRegIdx))
|
||||
continue;
|
||||
MachineOperand &MO = MI.getOperand(OpI);
|
||||
if (MO.isReg() && MO.readsReg())
|
||||
LR.addReg(MO.getReg());
|
||||
}
|
||||
|
||||
for (unsigned ScratchReg : AArch64::GPR64RegClass) {
|
||||
if (!LR.available(ScratchReg) || MRI.isReserved(ScratchReg))
|
||||
continue;
|
||||
|
@@ -917,6 +917,8 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF,
|
||||
int FPOffset = MFI.getObjectOffset(FI) + FixedObject + 16;
|
||||
int Offset = MFI.getObjectOffset(FI) + MFI.getStackSize();
|
||||
bool isFixed = MFI.isFixedObjectIndex(FI);
|
||||
bool isCSR = !isFixed && MFI.getObjectOffset(FI) >=
|
||||
-((int)AFI->getCalleeSavedStackSize());
|
||||
|
||||
// Use frame pointer to reference fixed objects. Use it for locals if
|
||||
// there are VLAs or a dynamically realigned SP (and thus the SP isn't
|
||||
@@ -930,6 +932,12 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF,
|
||||
// Argument access should always use the FP.
|
||||
if (isFixed) {
|
||||
UseFP = hasFP(MF);
|
||||
} else if (isCSR && RegInfo->needsStackRealignment(MF)) {
|
||||
// References to the CSR area must use FP if we're re-aligning the stack
|
||||
// since the dynamically-sized alignment padding is between the SP/BP and
|
||||
// the CSR area.
|
||||
assert(hasFP(MF) && "Re-aligned stack must have frame pointer");
|
||||
UseFP = true;
|
||||
} else if (hasFP(MF) && !RegInfo->hasBasePointer(MF) &&
|
||||
!RegInfo->needsStackRealignment(MF)) {
|
||||
// Use SP or FP, whichever gives us the best chance of the offset
|
||||
@@ -947,9 +955,9 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF,
|
||||
}
|
||||
}
|
||||
|
||||
assert((isFixed || !RegInfo->needsStackRealignment(MF) || !UseFP) &&
|
||||
assert(((isFixed || isCSR) || !RegInfo->needsStackRealignment(MF) || !UseFP) &&
|
||||
"In the presence of dynamic stack pointer realignment, "
|
||||
"non-argument objects cannot be accessed through the frame pointer");
|
||||
"non-argument/CSR objects cannot be accessed through the frame pointer");
|
||||
|
||||
if (UseFP) {
|
||||
FrameReg = RegInfo->getFrameRegister(MF);
|
||||
|
@@ -1 +1 @@
|
||||
9a021c751eec90145bb1ee521df8e93258028de5
|
||||
3fa5457b4e0cd4affafb6c28aff7b0e1156bc74c
|
@@ -1 +1 @@
|
||||
79826ca2ed8dc6f3d0f111508f3cb638fe2f4281
|
||||
040011d858e771021341f098d0f852310aba87f1
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user