summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86LegalizerInfo.cpp
diff options
context:
space:
mode:
authorIgor Breger <igor.breger@intel.com>2017-03-26 08:11:12 +0000
committerIgor Breger <igor.breger@intel.com>2017-03-26 08:11:12 +0000
commit531a203a0617ddabc7ab5bd4342b1697dd9625be (patch)
treecec10f8fd45352473c2ee4e683949fff5383b8c8 /llvm/lib/Target/X86/X86LegalizerInfo.cpp
parentfa7367428ae39271e5a2f2554f7c607d9b07a5c8 (diff)
downloadbcm5719-llvm-531a203a0617ddabc7ab5bd4342b1697dd9625be.tar.gz
bcm5719-llvm-531a203a0617ddabc7ab5bd4342b1697dd9625be.zip
[GlobalISel][X86] support G_FRAME_INDEX instruction selection.
Summary: Support G_FRAME_INDEX instruction selection. Reviewers: zvi, rovka, ab, qcolombet Reviewed By: ab Subscribers: llvm-commits, dberris, kristof.beyls, eladcohen, guyblank Differential Revision: https://reviews.llvm.org/D30980 llvm-svn: 298800
Diffstat (limited to 'llvm/lib/Target/X86/X86LegalizerInfo.cpp')
-rw-r--r--llvm/lib/Target/X86/X86LegalizerInfo.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/X86LegalizerInfo.cpp
index bda657946f7..3ab80c4f20c 100644
--- a/llvm/lib/Target/X86/X86LegalizerInfo.cpp
+++ b/llvm/lib/Target/X86/X86LegalizerInfo.cpp
@@ -13,6 +13,7 @@
#include "X86LegalizerInfo.h"
#include "X86Subtarget.h"
+#include "X86TargetMachine.h"
#include "llvm/CodeGen/ValueTypes.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Type.h"
@@ -25,7 +26,9 @@ using namespace TargetOpcode;
#error "You shouldn't build this"
#endif
-X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI) : Subtarget(STI) {
+X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
+ const X86TargetMachine &TM)
+ : Subtarget(STI), TM(TM) {
setLegalizerInfo32bit();
setLegalizerInfo64bit();
@@ -56,6 +59,9 @@ void X86LegalizerInfo::setLegalizerInfo32bit() {
// And everything's fine in addrspace 0.
setAction({MemOp, 1, p0}, Legal);
}
+
+ // Pointer-handling
+ setAction({G_FRAME_INDEX, p0}, Legal);
}
void X86LegalizerInfo::setLegalizerInfo64bit() {
@@ -63,7 +69,7 @@ void X86LegalizerInfo::setLegalizerInfo64bit() {
if (!Subtarget.is64Bit())
return;
- const LLT p0 = LLT::pointer(0, 64);
+ const LLT p0 = LLT::pointer(0, TM.getPointerSize() * 8);
const LLT s8 = LLT::scalar(8);
const LLT s16 = LLT::scalar(16);
const LLT s32 = LLT::scalar(32);
@@ -80,6 +86,9 @@ void X86LegalizerInfo::setLegalizerInfo64bit() {
// And everything's fine in addrspace 0.
setAction({MemOp, 1, p0}, Legal);
}
+
+ // Pointer-handling
+ setAction({G_FRAME_INDEX, p0}, Legal);
}
void X86LegalizerInfo::setLegalizerInfoSSE1() {
OpenPOWER on IntegriCloud