diff options
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 24 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 4 |
2 files changed, 5 insertions, 23 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 3627368f360..ccf0fca3d58 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -14896,29 +14896,15 @@ static SDValue EmitKTEST(SDValue Op, SelectionDAG &DAG, return SDValue(); } -static SDValue EmitTEST_i1(SDValue Op, SelectionDAG &DAG, const SDLoc &dl) { - - // Most probably the value is in GPR, use ZEXT + CMP. - if(Op.getOpcode() == ISD::TRUNCATE || - Op.getOpcode() == ISD::LOAD || - Op.getOpcode() == ISD::CopyFromReg) { - SDValue ExtOp = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i8, Op); - return DAG.getNode(X86ISD::CMP, dl, MVT::i32, ExtOp, - DAG.getConstant(0, dl, MVT::i8)); - } - - // Create cmp i1 that should be mapped to KORTEST. - return DAG.getNode(X86ISD::CMP, dl, MVT::i1, Op, - DAG.getConstant(0, dl, MVT::i8)); -} - /// Emit nodes that will be selected as "test Op0,Op0", or something /// equivalent. SDValue X86TargetLowering::EmitTest(SDValue Op, unsigned X86CC, const SDLoc &dl, SelectionDAG &DAG) const { - if (Op.getValueType() == MVT::i1) - return EmitTEST_i1(Op, DAG, dl); - + if (Op.getValueType() == MVT::i1) { + SDValue ExtOp = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i8, Op); + return DAG.getNode(X86ISD::CMP, dl, MVT::i32, ExtOp, + DAG.getConstant(0, dl, MVT::i8)); + } // CF and OF aren't always set the way we want. Determine which // of these we need. bool NeedCF = false; diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 5f3936de614..78cd5878662 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -2480,10 +2480,6 @@ multiclass avx512_mask_testop_w<bits<8> opc, string OpcodeStr, SDNode OpNode, defm KORTEST : avx512_mask_testop_w<0x98, "kortest", X86kortest>; defm KTEST : avx512_mask_testop_w<0x99, "ktest", X86ktest, HasDQI>; -def : Pat<(X86cmp VK1:$src, 0), - (KORTESTWrr (COPY_TO_REGCLASS VK1:$src, VK16), - (COPY_TO_REGCLASS VK1:$src, VK16))>, Requires<[HasAVX512]>; - // Mask shift multiclass avx512_mask_shiftop<bits<8> opc, string OpcodeStr, RegisterClass KRC, SDNode OpNode> { |