mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
895b12059d
The initialization order was not correct. These bugs were discovered by valgrind. They appear to work fine in practice but this patch should unblock switching the AVR backend on by default as now a standard AVR llc invocation runs without memory errors. The AVRISelLowering constructor would run before the subtarget boolean fields were initialized to false. Now, the initialization order is correct.
58 lines
2.0 KiB
C++
58 lines
2.0 KiB
C++
//===-- AVRSubtarget.cpp - AVR Subtarget Information ----------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements the AVR specific subclass of TargetSubtargetInfo.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "AVRSubtarget.h"
|
|
|
|
#include "llvm/BinaryFormat/ELF.h"
|
|
#include "llvm/Support/TargetRegistry.h"
|
|
|
|
#include "AVR.h"
|
|
#include "AVRTargetMachine.h"
|
|
#include "MCTargetDesc/AVRMCTargetDesc.h"
|
|
|
|
#define DEBUG_TYPE "avr-subtarget"
|
|
|
|
#define GET_SUBTARGETINFO_TARGET_DESC
|
|
#define GET_SUBTARGETINFO_CTOR
|
|
#include "AVRGenSubtargetInfo.inc"
|
|
|
|
namespace llvm {
|
|
|
|
AVRSubtarget::AVRSubtarget(const Triple &TT, const std::string &CPU,
|
|
const std::string &FS, const AVRTargetMachine &TM)
|
|
: AVRGenSubtargetInfo(TT, CPU, FS),
|
|
ELFArch(0),
|
|
|
|
// Subtarget features
|
|
m_hasSRAM(false), m_hasJMPCALL(false), m_hasIJMPCALL(false),
|
|
m_hasEIJMPCALL(false), m_hasADDSUBIW(false), m_hasSmallStack(false),
|
|
m_hasMOVW(false), m_hasLPM(false), m_hasLPMX(false), m_hasELPM(false),
|
|
m_hasELPMX(false), m_hasSPM(false), m_hasSPMX(false), m_hasDES(false),
|
|
m_supportsRMW(false), m_supportsMultiplication(false), m_hasBREAK(false),
|
|
m_hasTinyEncoding(false), m_FeatureSetDummy(false),
|
|
|
|
InstrInfo(), FrameLowering(),
|
|
TLInfo(TM, initializeSubtargetDependencies(CPU, FS, TM)), TSInfo() {
|
|
// Parse features string.
|
|
ParseSubtargetFeatures(CPU, FS);
|
|
}
|
|
|
|
AVRSubtarget &
|
|
AVRSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS,
|
|
const TargetMachine &TM) {
|
|
// Parse features string.
|
|
ParseSubtargetFeatures(CPU, FS);
|
|
return *this;
|
|
}
|
|
|
|
} // end of namespace llvm
|