[PATCH] D32473: [MSP430] Fix PR32769: Select8 and Select16 need to have SR in Uses.

Vadzim Dambrouski via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 24 23:19:23 PDT 2017


pftbest created this revision.

If Select pseudo instruction doesn't have use SR, then
CMP instructions are being marked as dead and later can be
removed by MachineCSE pass. This leads to incorrect code
generation.


https://reviews.llvm.org/D32473

Files:
  lib/Target/MSP430/MSP430InstrInfo.td
  test/CodeGen/MSP430/select-use-sr.ll


Index: test/CodeGen/MSP430/select-use-sr.ll
===================================================================
--- /dev/null
+++ test/CodeGen/MSP430/select-use-sr.ll
@@ -0,0 +1,21 @@
+; RUN: llc < %s -march=msp430 | FileCheck %s
+; PR32769
+
+target triple = "msp430"
+
+; Test that CMP instruction is not removed by MachineCSE.
+;
+; CHECK-LABEL: @f
+; CHECK: cmp.w r15, r13
+; CHECK: cmp.w r15, r13
+; CHECK-NEXT: jeq .LBB0_2
+define i16 @f(i16, i16, i16, i16) {
+entry:
+  %4 = icmp ult i16 %1, %3
+  %5 = zext i1 %4 to i16
+  %6 = icmp ult i16 %0, %2
+  %7 = zext i1 %6 to i16
+  %8 = icmp eq i16 %1, %3
+  %out = select i1 %8, i16 %5, i16 %7
+  ret i16 %out
+}
Index: lib/Target/MSP430/MSP430InstrInfo.td
===================================================================
--- lib/Target/MSP430/MSP430InstrInfo.td
+++ lib/Target/MSP430/MSP430InstrInfo.td
@@ -122,14 +122,17 @@
 }
 
 let usesCustomInserter = 1 in {
+  // SR is marked as used to prevent CMPs from appearing dead.
+  let Uses = [SR] in {
   def Select8  : Pseudo<(outs GR8:$dst), (ins GR8:$src, GR8:$src2, i8imm:$cc),
                         "# Select8 PSEUDO",
                         [(set GR8:$dst,
                           (MSP430selectcc GR8:$src, GR8:$src2, imm:$cc))]>;
   def Select16 : Pseudo<(outs GR16:$dst), (ins GR16:$src, GR16:$src2, i8imm:$cc),
                         "# Select16 PSEUDO",
                         [(set GR16:$dst,
                           (MSP430selectcc GR16:$src, GR16:$src2, imm:$cc))]>;
+  }
   let Defs = [SR] in {
   def Shl8     : Pseudo<(outs GR8:$dst), (ins GR8:$src, GR8:$cnt),
                         "# Shl8 PSEUDO",


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32473.96506.patch
Type: text/x-patch
Size: 1641 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170425/4016a933/attachment.bin>


More information about the llvm-commits mailing list