diff options
author | Alexander Ivchenko <alexander.ivchenko@intel.com> | 2018-02-08 22:40:31 +0000 |
---|---|---|
committer | Alexander Ivchenko <alexander.ivchenko@intel.com> | 2018-02-08 22:40:31 +0000 |
commit | a85c4fc0291613b4ca0f60850a73c46dcaea69ae (patch) | |
tree | 2912a4aaf453f10842f09287c22fc5c20ca96a19 | |
parent | af84ce162c0486039c6ef6ef5e0275a3d48e65ae (diff) | |
download | bcm5719-llvm-a85c4fc0291613b4ca0f60850a73c46dcaea69ae.tar.gz bcm5719-llvm-a85c4fc0291613b4ca0f60850a73c46dcaea69ae.zip |
[GlobalIsel][X86] Making {G_IMPLICIT_DEF, s128} legal
The patch is a split from D42287 and is related to
fixing failures after https://reviews.llvm.org/D37775
Reviewed By: qcolombet
Differential Revision: https://reviews.llvm.org/D42287
llvm-svn: 324664
-rw-r--r-- | llvm/lib/Target/X86/X86LegalizerInfo.cpp | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/GlobalISel/select-undef.mir | 22 |
2 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86LegalizerInfo.cpp b/llvm/lib/Target/X86/X86LegalizerInfo.cpp index 53548194ab9..a6a9d08278d 100644 --- a/llvm/lib/Target/X86/X86LegalizerInfo.cpp +++ b/llvm/lib/Target/X86/X86LegalizerInfo.cpp @@ -163,6 +163,9 @@ void X86LegalizerInfo::setLegalizerInfo64bit() { const LLT s128 = LLT::scalar(128); setAction({G_IMPLICIT_DEF, s64}, Legal); + // Need to have that, as tryFoldImplicitDef will create this pattern: + // s128 = EXTEND (G_IMPLICIT_DEF s32/s64) -> s128 = G_IMPLICIT_DEF + setAction({G_IMPLICIT_DEF, s128}, Legal); setAction({G_PHI, s64}, Legal); diff --git a/llvm/test/CodeGen/X86/GlobalISel/select-undef.mir b/llvm/test/CodeGen/X86/GlobalISel/select-undef.mir index 92fa14efdb5..62aa09011e2 100644 --- a/llvm/test/CodeGen/X86/GlobalISel/select-undef.mir +++ b/llvm/test/CodeGen/X86/GlobalISel/select-undef.mir @@ -11,6 +11,9 @@ ret i8 %r } + define float @test3() { + ret float undef + } ... --- name: test @@ -64,3 +67,22 @@ body: | RET 0, implicit $al ... +--- +name: test3 +alignment: 4 +legalized: true +regBankSelected: true +tracksRegLiveness: true +registers: + - { id: 1, class: vecr } +body: | + bb.1 (%ir-block.0): + ; ALL-LABEL: name: test3 + ; ALL: [[DEF:%[0-9]+]]:vr128 = IMPLICIT_DEF + ; ALL: $xmm0 = COPY [[DEF]] + ; ALL: RET 0, implicit $xmm0 + %1:vecr(s128) = G_IMPLICIT_DEF + $xmm0 = COPY %1:vecr(s128) + RET 0, implicit $xmm0 + +... |