[llvm] r262258 - [Hexagon] As a size optimization, not lazy extending TPREL or DTPREL variants since they're usually in range.
Colin LeMahieu via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 29 13:21:56 PST 2016
Author: colinl
Date: Mon Feb 29 15:21:56 2016
New Revision: 262258
URL: http://llvm.org/viewvc/llvm-project?rev=262258&view=rev
Log:
[Hexagon] As a size optimization, not lazy extending TPREL or DTPREL variants since they're usually in range.
Added:
llvm/trunk/test/MC/Hexagon/tprel_noextend.s
Modified:
llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp?rev=262258&r1=262257&r2=262258&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.cpp Mon Feb 29 15:21:56 2016
@@ -21,6 +21,7 @@
#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,
@@ -426,19 +427,24 @@ bool HexagonMCInstrInfo::isConstExtended
(MCI.getOpcode() != Hexagon::C4_addipc))
return false;
- // We could be using an instruction with an extendable immediate and shoehorn
- // a global address into it. If it is a global address it will be constant
- // extended. We do this for COMBINE.
- // We currently only handle isGlobal() because it is the only kind of
- // object we are going to end up with here for now.
- // In the future we probably should add isSymbol(), etc.
assert(!MO.isImm());
if (isa<HexagonMCExpr>(MO.getExpr()) &&
HexagonMCInstrInfo::mustNotExtend(*MO.getExpr()))
return false;
int64_t Value;
- if (!MO.getExpr()->evaluateAsAbsolute(Value))
- return true;
+ 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;
+ }
+ }
int MinValue = HexagonMCInstrInfo::getMinValue(MCII, MCI);
int MaxValue = HexagonMCInstrInfo::getMaxValue(MCII, MCI);
return (MinValue > Value || Value > MaxValue);
Added: llvm/trunk/test/MC/Hexagon/tprel_noextend.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Hexagon/tprel_noextend.s?rev=262258&view=auto
==============================================================================
--- llvm/trunk/test/MC/Hexagon/tprel_noextend.s (added)
+++ llvm/trunk/test/MC/Hexagon/tprel_noextend.s Mon Feb 29 15:21:56 2016
@@ -0,0 +1,8 @@
+# RUN: llvm-mc -arch=hexagon -filetype=obj %s | llvm-objdump -d - | FileCheck %s
+#
+
+# CHECK-NOT: immext
+r0 = #undefined at TPREL
+
+# CHECK-NOT: immext
+r0 = #undefined at DTPREL
More information about the llvm-commits
mailing list