diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-07-08 01:57:24 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-07-08 01:57:24 +0000 |
commit | 0160063aeb3197be08b3e52a4adfb692ce6f3e57 (patch) | |
tree | 8a87f489d8189cbf2ffd5b27c7e1faab8fc2455c /clang/lib/CodeGen/CGBuiltin.cpp | |
parent | 925ef0a1352b4ebf1326cbb805219382d0ba227e (diff) | |
download | bcm5719-llvm-0160063aeb3197be08b3e52a4adfb692ce6f3e57.tar.gz bcm5719-llvm-0160063aeb3197be08b3e52a4adfb692ce6f3e57.zip |
[X86] Reuse existing lambda and remove unnecessary argument from vector cmp builtin handling. NFC
llvm-svn: 274821
Diffstat (limited to 'clang/lib/CodeGen/CGBuiltin.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 195bfae0c91..92e37474389 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -6730,10 +6730,9 @@ 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()). - auto getVectorFCmpIR = [this, &Ops](CmpInst::Predicate Pred, - llvm::Type *VecTy) { + auto getVectorFCmpIR = [this, &Ops](CmpInst::Predicate Pred) { Value *Cmp = Builder.CreateFCmp(Pred, Ops[0], Ops[1]); - llvm::VectorType *FPVecTy = cast<llvm::VectorType>(VecTy); + llvm::VectorType *FPVecTy = cast<llvm::VectorType>(Ops[0]->getType()); llvm::VectorType *IntVecTy = llvm::VectorType::getInteger(FPVecTy); Value *Sext = Builder.CreateSExt(Cmp, IntVecTy); return Builder.CreateBitCast(Sext, FPVecTy); @@ -7255,28 +7254,28 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, // SSE packed comparison intrinsics case X86::BI__builtin_ia32_cmpeqps: case X86::BI__builtin_ia32_cmpeqpd: - return getVectorFCmpIR(CmpInst::FCMP_OEQ, Ops[0]->getType()); + return getVectorFCmpIR(CmpInst::FCMP_OEQ); case X86::BI__builtin_ia32_cmpltps: case X86::BI__builtin_ia32_cmpltpd: - return getVectorFCmpIR(CmpInst::FCMP_OLT, Ops[0]->getType()); + return getVectorFCmpIR(CmpInst::FCMP_OLT); case X86::BI__builtin_ia32_cmpleps: case X86::BI__builtin_ia32_cmplepd: - return getVectorFCmpIR(CmpInst::FCMP_OLE, Ops[0]->getType()); + return getVectorFCmpIR(CmpInst::FCMP_OLE); case X86::BI__builtin_ia32_cmpunordps: case X86::BI__builtin_ia32_cmpunordpd: - return getVectorFCmpIR(CmpInst::FCMP_UNO, Ops[0]->getType()); + return getVectorFCmpIR(CmpInst::FCMP_UNO); case X86::BI__builtin_ia32_cmpneqps: case X86::BI__builtin_ia32_cmpneqpd: - return getVectorFCmpIR(CmpInst::FCMP_UNE, Ops[0]->getType()); + return getVectorFCmpIR(CmpInst::FCMP_UNE); case X86::BI__builtin_ia32_cmpnltps: case X86::BI__builtin_ia32_cmpnltpd: - return getVectorFCmpIR(CmpInst::FCMP_UGE, Ops[0]->getType()); + return getVectorFCmpIR(CmpInst::FCMP_UGE); case X86::BI__builtin_ia32_cmpnleps: case X86::BI__builtin_ia32_cmpnlepd: - return getVectorFCmpIR(CmpInst::FCMP_UGT, Ops[0]->getType()); + return getVectorFCmpIR(CmpInst::FCMP_UGT); case X86::BI__builtin_ia32_cmpordps: case X86::BI__builtin_ia32_cmpordpd: - return getVectorFCmpIR(CmpInst::FCMP_ORD, Ops[0]->getType()); + return getVectorFCmpIR(CmpInst::FCMP_ORD); case X86::BI__builtin_ia32_cmpps: case X86::BI__builtin_ia32_cmpps256: case X86::BI__builtin_ia32_cmppd: @@ -7295,11 +7294,7 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, case 6: Pred = FCmpInst::FCMP_UGT; break; case 7: Pred = FCmpInst::FCMP_ORD; break; } - Value *Cmp = Builder.CreateFCmp(Pred, Ops[0], Ops[1]); - auto *FPVecTy = cast<llvm::VectorType>(Ops[0]->getType()); - auto *IntVecTy = llvm::VectorType::getInteger(FPVecTy); - Value *Sext = Builder.CreateSExt(Cmp, IntVecTy); - return Builder.CreateBitCast(Sext, FPVecTy); + return getVectorFCmpIR(Pred); } // We can't handle 8-31 immediates with native IR, use the intrinsic. |