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 }