#include "llvm/MC/MCSectionELF.h"
#include "llvm/MC/MCStreamer.h"
#include "llvm/MC/MCSubtargetInfo.h"
+#include "llvm/MC/MCValue.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ELF.h"
Expr = MCBinaryExpr::createAnd(Expr,
MCConstantExpr::create(0xffff, Context),
Context);
+ } else {
+ MCValue Value;
+ if (Expr->evaluateAsRelocatable(Value, nullptr, nullptr)) {
+ if (!Value.isAbsolute()) {
+ switch(Value.getAccessVariant()) {
+ case MCSymbolRefExpr::VariantKind::VK_TPREL:
+ case MCSymbolRefExpr::VariantKind::VK_DTPREL:
+ // Don't lazy extend these expression variants
+ MustNotExtend = !MustExtend;
+ break;
+ default:
+ break;
+ }
+ }
+ }
}
Expr = HexagonMCExpr::create(Expr, Context);
HexagonMCInstrInfo::setMustNotExtend(*Expr, MustNotExtend);
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCInstrInfo.h"
#include "llvm/MC/MCSubtargetInfo.h"
-#include "llvm/MC/MCValue.h"
namespace llvm {
void HexagonMCInstrInfo::addConstant(MCInst &MI, uint64_t Value,
HexagonMCInstrInfo::mustNotExtend(*MO.getExpr()))
return false;
int64_t Value;
- if (!MO.getExpr()->evaluateAsAbsolute(Value)) {
- MCValue Value;
- if (!MO.getExpr()->evaluateAsRelocatable(Value, nullptr, nullptr))
- return true;
- switch(Value.getAccessVariant()) {
- case MCSymbolRefExpr::VariantKind::VK_TPREL:
- case MCSymbolRefExpr::VariantKind::VK_DTPREL:
- // Don't lazy extend these expression variants
- return false;
- default:
- return true;
- }
- }
+ if (!MO.getExpr()->evaluateAsAbsolute(Value))
+ return true;
int MinValue = HexagonMCInstrInfo::getMinValue(MCII, MCI);
int MaxValue = HexagonMCInstrInfo::getMaxValue(MCII, MCI);
return (MinValue > Value || Value > MaxValue);