summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorAlexander Ivchenko <alexander.ivchenko@intel.com>2018-02-28 12:11:53 +0000
committerAlexander Ivchenko <alexander.ivchenko@intel.com>2018-02-28 12:11:53 +0000
commitc01f750480fc918f58fa25a789eda0e1eaea5117 (patch)
tree309c243dcc7636f2bce89cc5600ee7670ee89493 /llvm/lib/Target
parent256869d8bcf6ee6a5c44a18cb1074b89c7dd5a13 (diff)
downloadbcm5719-llvm-c01f750480fc918f58fa25a789eda0e1eaea5117.tar.gz
bcm5719-llvm-c01f750480fc918f58fa25a789eda0e1eaea5117.zip
[GlobalIsel][X86] Support G_INTTOPTR instruction.
Add legalization/selection for x86/x86_64 and corresponding tests. Reviewed By: igorb Differential Revision: https://reviews.llvm.org/D43622 llvm-svn: 326320
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/X86/X86InstructionSelector.cpp2
-rw-r--r--llvm/lib/Target/X86/X86LegalizerInfo.cpp5
2 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86InstructionSelector.cpp b/llvm/lib/Target/X86/X86InstructionSelector.cpp
index 67b31a828cb..afbf5d5e23d 100644
--- a/llvm/lib/Target/X86/X86InstructionSelector.cpp
+++ b/llvm/lib/Target/X86/X86InstructionSelector.cpp
@@ -350,6 +350,8 @@ bool X86InstructionSelector::select(MachineInstr &I,
case TargetOpcode::G_PTRTOINT:
case TargetOpcode::G_TRUNC:
return selectTruncOrPtrToInt(I, MRI, MF);
+ case TargetOpcode::G_INTTOPTR:
+ return selectCopy(I, MRI);
case TargetOpcode::G_ZEXT:
return selectZext(I, MRI, MF);
case TargetOpcode::G_ANYEXT:
diff --git a/llvm/lib/Target/X86/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/X86LegalizerInfo.cpp
index 050e5ef8b29..bcf0ffb1bdf 100644
--- a/llvm/lib/Target/X86/X86LegalizerInfo.cpp
+++ b/llvm/lib/Target/X86/X86LegalizerInfo.cpp
@@ -124,11 +124,13 @@ void X86LegalizerInfo::setLegalizerInfo32bit() {
setAction({G_GEP, p0}, Legal);
setAction({G_GEP, 1, s32}, Legal);
- if (!Subtarget.is64Bit())
+ if (!Subtarget.is64Bit()) {
getActionDefinitionsBuilder(G_PTRTOINT)
.legalForCartesianProduct({s1, s8, s16, s32}, {p0})
.maxScalar(0, s32)
.widenScalarToNextPow2(0, /*Min*/ 8);
+ getActionDefinitionsBuilder(G_INTTOPTR).legalFor({s32, p0});
+ }
// Control-flow
setAction({G_BRCOND, s1}, Legal);
@@ -194,6 +196,7 @@ void X86LegalizerInfo::setLegalizerInfo64bit() {
.legalForCartesianProduct({s1, s8, s16, s32, s64}, {p0})
.maxScalar(0, s64)
.widenScalarToNextPow2(0, /*Min*/ 8);
+ getActionDefinitionsBuilder(G_INTTOPTR).legalFor({s64, p0});
// Constants
setAction({TargetOpcode::G_CONSTANT, s64}, Legal);
OpenPOWER on IntegriCloud