From 1d5ff6bb7a4e4ed38351188ba4b2b7d6e0ae3c71 Mon Sep 17 00:00:00 2001
From: Juergen Ributzka <juergen@apple.com>
Date: Tue, 17 Jun 2014 14:47:45 +0000
Subject: [PATCH] [FastISel][X86] Fix previous refactoring commit (r211077)

Overlooked that fcmp_une uses an "or" instead of an "and" for combining the
flags.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211104 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/Target/X86/X86FastISel.cpp    | 8 ++++----
 test/CodeGen/X86/fast-isel-cmp.ll | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp
index 80cc99bb80c..6a4a467f6a9 100644
--- a/lib/Target/X86/X86FastISel.cpp
+++ b/lib/Target/X86/X86FastISel.cpp
@@ -1049,9 +1049,9 @@ bool X86FastISel::X86SelectCmp(const Instruction *I) {
     return false;
 
   // FCMP_OEQ and FCMP_UNE cannot be checked with a single instruction.
-  static unsigned SETFOpcTable[2][2] = {
-    { X86::SETEr,  X86::SETNPr },
-    { X86::SETNEr, X86::SETPr  }
+  static unsigned SETFOpcTable[2][3] = {
+    { X86::SETEr,  X86::SETNPr, X86::AND8rr },
+    { X86::SETNEr, X86::SETPr,  X86::OR8rr  }
   };
   unsigned *SETFOpc = nullptr;
   switch (CI->getPredicate()) {
@@ -1071,7 +1071,7 @@ bool X86FastISel::X86SelectCmp(const Instruction *I) {
             FlagReg1);
     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(SETFOpc[1]),
             FlagReg2);
-    BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(X86::AND8rr),
+    BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(SETFOpc[2]),
             ResultReg).addReg(FlagReg1).addReg(FlagReg2);
     UpdateValueMap(I, ResultReg);
     return true;
diff --git a/test/CodeGen/X86/fast-isel-cmp.ll b/test/CodeGen/X86/fast-isel-cmp.ll
index edf1263a3ea..61cc67a244e 100644
--- a/test/CodeGen/X86/fast-isel-cmp.ll
+++ b/test/CodeGen/X86/fast-isel-cmp.ll
@@ -155,7 +155,7 @@ define zeroext i1 @fcmp_une(float %x, float %y) {
 ; FAST:       ucomiss  %xmm1, %xmm0
 ; FAST-NEXT:  setne    %al
 ; FAST-NEXT:  setp     %cl
-; FAST-NEXT:  andb     %al, %cl
+; FAST-NEXT:  orb      %al, %cl
   %1 = fcmp une float %x, %y
   ret i1 %1
 }