diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-07-08 01:48:44 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-07-08 01:48:44 +0000 |
commit | 925ef0a1352b4ebf1326cbb805219382d0ba227e (patch) | |
tree | cac1d66a67f6079d212c4bdd29655cd5ff6c3cd6 /clang/lib/CodeGen | |
parent | a5cbf4351eaed9643ad254f674d325f581204ab2 (diff) | |
download | bcm5719-llvm-925ef0a1352b4ebf1326cbb805219382d0ba227e.tar.gz bcm5719-llvm-925ef0a1352b4ebf1326cbb805219382d0ba227e.zip |
[X86] Remove a couple calls to create V2F64 and V4F32 types for builtin handling. Just get the type from the operand of the builtin instead. NFC
llvm-svn: 274820
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 46 |
1 files changed, 17 insertions, 29 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index df5ca3a1162..195bfae0c91 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -6730,14 +6730,10 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, // TODO: The builtins could be removed if the SSE header files used vector // extension comparisons directly (vector ordered/unordered may need // additional support via __builtin_isnan()). - llvm::VectorType *V2F64 = - llvm::VectorType::get(llvm::Type::getDoubleTy(getLLVMContext()), 2); - llvm::VectorType *V4F32 = - llvm::VectorType::get(llvm::Type::getFloatTy(getLLVMContext()), 4); - auto getVectorFCmpIR = [this, &Ops](CmpInst::Predicate Pred, - llvm::VectorType *FPVecTy) { + llvm::Type *VecTy) { Value *Cmp = Builder.CreateFCmp(Pred, Ops[0], Ops[1]); + llvm::VectorType *FPVecTy = cast<llvm::VectorType>(VecTy); llvm::VectorType *IntVecTy = llvm::VectorType::getInteger(FPVecTy); Value *Sext = Builder.CreateSExt(Cmp, IntVecTy); return Builder.CreateBitCast(Sext, FPVecTy); @@ -7258,37 +7254,29 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, // SSE packed comparison intrinsics case X86::BI__builtin_ia32_cmpeqps: - return getVectorFCmpIR(CmpInst::FCMP_OEQ, V4F32); - case X86::BI__builtin_ia32_cmpltps: - return getVectorFCmpIR(CmpInst::FCMP_OLT, V4F32); - case X86::BI__builtin_ia32_cmpleps: - return getVectorFCmpIR(CmpInst::FCMP_OLE, V4F32); - case X86::BI__builtin_ia32_cmpunordps: - return getVectorFCmpIR(CmpInst::FCMP_UNO, V4F32); - case X86::BI__builtin_ia32_cmpneqps: - return getVectorFCmpIR(CmpInst::FCMP_UNE, V4F32); - case X86::BI__builtin_ia32_cmpnltps: - return getVectorFCmpIR(CmpInst::FCMP_UGE, V4F32); - case X86::BI__builtin_ia32_cmpnleps: - return getVectorFCmpIR(CmpInst::FCMP_UGT, V4F32); - case X86::BI__builtin_ia32_cmpordps: - return getVectorFCmpIR(CmpInst::FCMP_ORD, V4F32); case X86::BI__builtin_ia32_cmpeqpd: - return getVectorFCmpIR(CmpInst::FCMP_OEQ, V2F64); + return getVectorFCmpIR(CmpInst::FCMP_OEQ, Ops[0]->getType()); + case X86::BI__builtin_ia32_cmpltps: case X86::BI__builtin_ia32_cmpltpd: - return getVectorFCmpIR(CmpInst::FCMP_OLT, V2F64); + return getVectorFCmpIR(CmpInst::FCMP_OLT, Ops[0]->getType()); + case X86::BI__builtin_ia32_cmpleps: case X86::BI__builtin_ia32_cmplepd: - return getVectorFCmpIR(CmpInst::FCMP_OLE, V2F64); + return getVectorFCmpIR(CmpInst::FCMP_OLE, Ops[0]->getType()); + case X86::BI__builtin_ia32_cmpunordps: case X86::BI__builtin_ia32_cmpunordpd: - return getVectorFCmpIR(CmpInst::FCMP_UNO, V2F64); + return getVectorFCmpIR(CmpInst::FCMP_UNO, Ops[0]->getType()); + case X86::BI__builtin_ia32_cmpneqps: case X86::BI__builtin_ia32_cmpneqpd: - return getVectorFCmpIR(CmpInst::FCMP_UNE, V2F64); + return getVectorFCmpIR(CmpInst::FCMP_UNE, Ops[0]->getType()); + case X86::BI__builtin_ia32_cmpnltps: case X86::BI__builtin_ia32_cmpnltpd: - return getVectorFCmpIR(CmpInst::FCMP_UGE, V2F64); + return getVectorFCmpIR(CmpInst::FCMP_UGE, Ops[0]->getType()); + case X86::BI__builtin_ia32_cmpnleps: case X86::BI__builtin_ia32_cmpnlepd: - return getVectorFCmpIR(CmpInst::FCMP_UGT, V2F64); + return getVectorFCmpIR(CmpInst::FCMP_UGT, Ops[0]->getType()); + case X86::BI__builtin_ia32_cmpordps: case X86::BI__builtin_ia32_cmpordpd: - return getVectorFCmpIR(CmpInst::FCMP_ORD, V2F64); + return getVectorFCmpIR(CmpInst::FCMP_ORD, Ops[0]->getType()); case X86::BI__builtin_ia32_cmpps: case X86::BI__builtin_ia32_cmpps256: case X86::BI__builtin_ia32_cmppd: |