diff options
author | Igor Breger <igor.breger@intel.com> | 2017-04-07 14:41:59 +0000 |
---|---|---|
committer | Igor Breger <igor.breger@intel.com> | 2017-04-07 14:41:59 +0000 |
commit | 2953788c36e7fe37a0b6d5f24834a22eff5f889b (patch) | |
tree | 0d7888458cef7e65352b5ef9c94ff3e0104dd33b /llvm/lib/Target | |
parent | 138ad6c9c005af27727432d89e690e1bbe40b5ad (diff) | |
download | bcm5719-llvm-2953788c36e7fe37a0b6d5f24834a22eff5f889b.tar.gz bcm5719-llvm-2953788c36e7fe37a0b6d5f24834a22eff5f889b.zip |
[GlobalISel] implement narrowing for G_CONSTANT.
Summary: [GlobalISel] implement narrowing for G_CONSTANT.
Reviewers: bogner, zvi, t.p.northover
Reviewed By: t.p.northover
Subscribers: llvm-commits, dberris, rovka, kristof.beyls
Differential Revision: https://reviews.llvm.org/D31744
llvm-svn: 299772
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/X86/X86LegalizerInfo.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/X86LegalizerInfo.cpp index 3ab80c4f20c..c2dc762fec5 100644 --- a/llvm/lib/Target/X86/X86LegalizerInfo.cpp +++ b/llvm/lib/Target/X86/X86LegalizerInfo.cpp @@ -44,9 +44,11 @@ void X86LegalizerInfo::setLegalizerInfo32bit() { return; const LLT p0 = LLT::pointer(0, 32); + const LLT s1 = LLT::scalar(1); const LLT s8 = LLT::scalar(8); const LLT s16 = LLT::scalar(16); const LLT s32 = LLT::scalar(32); + const LLT s64 = LLT::scalar(64); for (unsigned BinOp : {G_ADD, G_SUB}) for (auto Ty : {s8, s16, s32}) @@ -62,6 +64,13 @@ void X86LegalizerInfo::setLegalizerInfo32bit() { // Pointer-handling setAction({G_FRAME_INDEX, p0}, Legal); + + // Constants + for (auto Ty : {s8, s16, s32, p0}) + setAction({TargetOpcode::G_CONSTANT, Ty}, Legal); + + setAction({TargetOpcode::G_CONSTANT, s1}, WidenScalar); + setAction({TargetOpcode::G_CONSTANT, s64}, NarrowScalar); } void X86LegalizerInfo::setLegalizerInfo64bit() { @@ -70,6 +79,7 @@ void X86LegalizerInfo::setLegalizerInfo64bit() { return; const LLT p0 = LLT::pointer(0, TM.getPointerSize() * 8); + const LLT s1 = LLT::scalar(1); const LLT s8 = LLT::scalar(8); const LLT s16 = LLT::scalar(16); const LLT s32 = LLT::scalar(32); @@ -89,6 +99,12 @@ void X86LegalizerInfo::setLegalizerInfo64bit() { // Pointer-handling setAction({G_FRAME_INDEX, p0}, Legal); + + // Constants + for (auto Ty : {s8, s16, s32, s64, p0}) + setAction({TargetOpcode::G_CONSTANT, Ty}, Legal); + + setAction({TargetOpcode::G_CONSTANT, s1}, WidenScalar); } void X86LegalizerInfo::setLegalizerInfoSSE1() { |