[GlobalIsel][X86] Making {G_IMPLICIT_DEF, s128} legal
authorAlexander Ivchenko <alexander.ivchenko@intel.com>
Thu, 8 Feb 2018 22:40:31 +0000 (22:40 +0000)
committerAlexander Ivchenko <alexander.ivchenko@intel.com>
Thu, 8 Feb 2018 22:40:31 +0000 (22:40 +0000)
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

llvm/lib/Target/X86/X86LegalizerInfo.cpp
llvm/test/CodeGen/X86/GlobalISel/select-undef.mir

index 5354819..a6a9d08 100644 (file)
@@ -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);
 
index 92fa14e..62aa090 100644 (file)
@@ -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
+
+...