diff options
| author | Craig Topper <craig.topper@intel.com> | 2017-09-18 20:49:13 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2017-09-18 20:49:13 +0000 |
| commit | 39cdb84560177ceb583f07f8e29d3883639fa86c (patch) | |
| tree | 61c884cb940dcd66e21c26a4ac01917a9e55b48b /llvm/lib/Target | |
| parent | 194d0edf73dcc7c7e3445157a6ed9b7da6327218 (diff) | |
| download | bcm5719-llvm-39cdb84560177ceb583f07f8e29d3883639fa86c.tar.gz bcm5719-llvm-39cdb84560177ceb583f07f8e29d3883639fa86c.zip | |
[X86] Make sure we still emit zext for GR32 to GR64 when the source of the zext is AssertZext
The AssertZext we might see in this case is only giving information about the lower 32 bits. It isn't providing information about the upper 32 bits. So we should emit a zext.
This fixes PR28540.
Differential Revision: https://reviews.llvm.org/D37729
llvm-svn: 313563
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrCompiler.td | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86InstrCompiler.td b/llvm/lib/Target/X86/X86InstrCompiler.td index dc29cf1d839..1e419fb9da8 100644 --- a/llvm/lib/Target/X86/X86InstrCompiler.td +++ b/llvm/lib/Target/X86/X86InstrCompiler.td @@ -1247,12 +1247,14 @@ def : Pat<(i64 (anyext GR32:$src)), // Any instruction that defines a 32-bit result leaves the high half of the // register. Truncate can be lowered to EXTRACT_SUBREG. CopyFromReg may // be copying from a truncate. Any other 32-bit operation will zero-extend -// up to 64 bits. +// up to 64 bits. AssertSext/AssertZext aren't saying anything about the upper +// 32 bits, they're probably just qualifying a CopyFromReg. def def32 : PatLeaf<(i32 GR32:$src), [{ return N->getOpcode() != ISD::TRUNCATE && N->getOpcode() != TargetOpcode::EXTRACT_SUBREG && N->getOpcode() != ISD::CopyFromReg && - N->getOpcode() != ISD::AssertSext; + N->getOpcode() != ISD::AssertSext && + N->getOpcode() != ISD::AssertZext; }]>; // In the case of a 32-bit def that is known to implicitly zero-extend, |

