mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-20 12:05:48 -04:00

Similar to PR/25526, fast-regalloc introduces spills at the end of basic blocks. When this occurs in between an ll and sc, the stores can cause the atomic sequence to fail. This patch fixes the issue by introducing more pseudos to represent atomic operations and moving their lowering to after the expansion of postRA pseudos. This version addresses issues with the initial implementation and covers all atomic operations. This resolves PR/32020. Thanks to James Cowgill for reporting the issue! Patch By: Simon Dardis Differential Revision: https://reviews.llvm.org/D31287 llvm-svn: 336328
52 lines
1.7 KiB
C++
52 lines
1.7 KiB
C++
//===-- Mips.h - Top-level interface for Mips representation ----*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains the entry points for global functions defined in
|
|
// the LLVM Mips back-end.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_MIPS_MIPS_H
|
|
#define LLVM_LIB_TARGET_MIPS_MIPS_H
|
|
|
|
#include "MCTargetDesc/MipsMCTargetDesc.h"
|
|
#include "llvm/Target/TargetMachine.h"
|
|
|
|
namespace llvm {
|
|
class MipsTargetMachine;
|
|
class ModulePass;
|
|
class FunctionPass;
|
|
class MipsRegisterBankInfo;
|
|
class MipsSubtarget;
|
|
class MipsTargetMachine;
|
|
class InstructionSelector;
|
|
class PassRegistry;
|
|
|
|
ModulePass *createMipsOs16Pass();
|
|
ModulePass *createMips16HardFloatPass();
|
|
|
|
FunctionPass *createMipsModuleISelDagPass();
|
|
FunctionPass *createMipsOptimizePICCallPass();
|
|
FunctionPass *createMipsDelaySlotFillerPass();
|
|
FunctionPass *createMipsBranchExpansion();
|
|
FunctionPass *createMipsConstantIslandPass();
|
|
FunctionPass *createMicroMipsSizeReducePass();
|
|
FunctionPass *createMipsExpandPseudoPass();
|
|
|
|
InstructionSelector *createMipsInstructionSelector(const MipsTargetMachine &,
|
|
MipsSubtarget &,
|
|
MipsRegisterBankInfo &);
|
|
|
|
void initializeMipsDelaySlotFillerPass(PassRegistry &);
|
|
void initializeMipsBranchExpansionPass(PassRegistry &);
|
|
void initializeMicroMipsSizeReducePass(PassRegistry &);
|
|
} // end namespace llvm;
|
|
|
|
#endif
|